Alb*_*ori 157 xcode interface-builder storyboard ios swift
我有一个非常简单的UITextView子类,它添加了"占位符"功能,您可以在Text Field对象中找到它.这是我的子类代码:
import UIKit
import Foundation
@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
@IBInspectable var placeholder: String = "" {
didSet {
setPlaceholderText()
}
}
private let placeholderColor: UIColor = UIColor.lightGrayColor()
private var textColorCache: UIColor!
override init(frame: CGRect) {
super.init(frame: frame)
self.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == placeholder {
textView.text = ""
textView.textColor = textColorCache
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text == "" && placeholder != "" {
setPlaceholderText()
}
}
func setPlaceholderText() {
if placeholder != "" {
if textColorCache == nil { textColorCache = self.textColor }
self.textColor = placeholderColor
self.text = placeholder
}
}
}
Run Code Online (Sandbox Code Playgroud)
在UITextViewIdentity Inspector中更改对象的类之后PlaceholderTextView,我可以Placeholder在Attribute Inspector中设置该属性.代码在运行应用程序时效果很好,但不会在界面构建器中显示占位符文本.我还得到以下非阻塞错误(我假设这就是它在设计时不渲染的原因):
错误:IB Designables:无法更新自动布局状态:Interface Builder Cocoa Touch Tool崩溃
错误:IB Designables:无法呈现PlaceholderTextView的实例:渲染视图的时间超过200毫秒.您的绘图代码可能会因性能下降而受损.
我无法弄清楚导致这些错误的原因.第二个错误没有任何意义,因为我甚至没有覆盖drawRect().有任何想法吗?
Pet*_*ter 235
Interface Builder Cocoa Touch Tool崩溃时会生成崩溃报告.论文位于~/Library/Logs/DiagnosticReports并命名IBDesignablesAgentCocoaTouch_*.crash.在我的例子中,它们包含一个有用的堆栈跟踪,可以在我的代码中找出问题.
Dus*_*ams 50
我有过几次相同的问题.两次它都是在我将nib不能放在视图上时将IBDesignable笔尖加载到故事板上时开始的(即我有一个关闭UIView的按钮但仍然在笔尖中).一旦我修复了xCode仍然给我错误,所以我重新启动Xcode,直到它随机退出给我错误.
我希望这有帮助.
更新:我刚刚杀死了名为"Interface Builder Cocoa Touch Tool"的所有进程,重新启动了Xcode并且错误消失了.不知道这是否总是有效.
jmo*_*kel 39
在我的例子中,我在initWithFrame/initWithCoder方法中执行下一步创建视图:
className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
Run Code Online (Sandbox Code Playgroud)
看起来我不应该使用主捆绑,而是使用类捆绑.所以我替换了以下代码并且它有效:
bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
Run Code Online (Sandbox Code Playgroud)
我想也许这可能对某人有所帮助.
Fyo*_*yok 14
您可以在Interface Builder中选择自定义视图,然后使用
Editor,Debug Selected Views.IBDesignableAgentCocoaTouch当所有断点(包括异常断点)都起作用并且您可以准确识别视图崩溃的位置时,它将启动所谓的调试会话.
Zai*_*han 12
对于XCode8 - Swift
添加可选值作为默认值@IBInspectable导致问题.
这不起作用:
@IBInspectable var repeatImage: UIImage = UIImage(named:"myImage")!{
didSet {
// configureView
}
}
Run Code Online (Sandbox Code Playgroud)
这应该工作:
@IBInspectable var repeatImage: UIImage = RepeatImageView.getDefaultImage() {
didSet {
// configureView()
}
}
class func getDefaultImage() -> UIImage {
if let defaultImage = UIImage(named: "myImage") {
return defaultImage
} else {
return UIImage()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
我遇到了类似的Interface Builder问题渲染设计.
使用本答案中建议的技术,我能够追踪到使用图像文字的问题.
渲染崩溃
self.backgroundImage.image = #imageLiteral(resourceName: "rectangleCenter")
Run Code Online (Sandbox Code Playgroud)
没有渲染崩溃
self.backgroundImage.image = UIImage(named: "rectangleCenter")
Run Code Online (Sandbox Code Playgroud)
实际上,如果在故事板中的任何视图中都有一些旧的 用户定义属性(对当前视图无效),则可能导致代理崩溃.
此外,有时它只是因为一个讨厌的Xcode错误.要检查它,当您在故事板上取消选中编辑器>自动刷新视图,然后移动到另一个文件,清理并重新启动您的项目.再次输入故事板后,可以单击编辑器>刷新视图并再次选中自动视图.那一次也解决了我的问题.
如果两者都不起作用,那么您可能对IBDesignable视图做了一些错误,因此通过单击编辑器>调试视图选择故事板中的崩溃视图并进行调试
| 归档时间: |
|
| 查看次数: |
77382 次 |
| 最近记录: |