相关疑难解决方法(0)

Swift正确加载xib文件的方法

我在swift项目中加载xib文件有一些奇怪的问题.这太令人沮丧,因为我已经知道如何在Obj-C中做到这一点.但是因为swift很快,所以你不能像你那样做..:/

所以我创建了IconTextFiled.xib和IconTextField.swift.(扩展UITextField)在xib中我在Idenity检查器中填充字段Class,在故事板中我对一些textFields执行相同操作.所以我们很高兴只需从xib添加加载到init方法?没有.

在objc我会这样做

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"IconTextField" owner:self options:nil];
        self = [nib objectAtIndex:0];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

所以我想如果我翻译成swift就会很好.

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    let nib:NSArray = NSBundle.mainBundle().loadNibNamed("IconTextField", owner: self, options: nil)
    self = nib.objectAtIndex(0)
}
Run Code Online (Sandbox Code Playgroud)

但那不起作用.我不知道为什么,但它试图创建更多的对象和崩溃

最后我发现了扩展

extension IconTextField {
    class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> IconTextField? {
        return UINib(
            nibName: nibNamed,
            bundle: bundle
            ).instantiateWithOwner(nil, options: nil)[0] as? IconTextField
    }
} …
Run Code Online (Sandbox Code Playgroud)

interface-builder xib ios swift

14
推荐指数
2
解决办法
3万
查看次数

在ios 8 beta 5中是否损坏了带有nib文件的视图控制器?

我在ios 8 beta 4中创建了一个测试项目,它作为主视图控制器和第二个视图控制器创建为带有xib文件的UIViewController子类.

我在主控制器上放了一个按钮来显示第二个控制器:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func testVCBtnTapped() {
    let vc = TestVC()
    presentViewController(vc, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
Run Code Online (Sandbox Code Playgroud)

}

我运行应用程序并按下按钮显示第二个控制器 - 一切都很好

转到xcode beta 5,我运行应用程序,当我按下按钮时,屏幕变黑.

因为我知道他们搞砸了init代码,所以我尝试使用覆盖来查看它会修复它:

class TestVC: UIViewController {

override init() {
    super.init()
}
required init(coder aDecoder: NSCoder!) {
    super.init(coder: …
Run Code Online (Sandbox Code Playgroud)

xcode ios

12
推荐指数
1
解决办法
6536
查看次数

IBOutlets 未在 XCode 6.1 上显示 (6A1052d)

这是一个相当大的问题:奥特莱斯没有出现在 IB 中。

重现:

1)我将变量声明为 IBOutlet,例如在我的视图控制器的 .h 文件中

@property (nonatomic, strong) IBOutlet UILabel* testlabel;
Run Code Online (Sandbox Code Playgroud)

2)我打开故事板,单击视图控制器。- 如果这是一个新项目,则没有“Outlet”列表。- 如果这是一个已定义插座的旧项目,则“插座”列表包含以前的插座,但不包含我添加的插座。

有没有人遇到同样的问题。这非常重要,因为除非我停止使用 Outlet,否则我基本上无法继续。我在发行说明中找不到有关它的任何信息。

编辑我在 youtube 上添加了一个视频来显示问题,以防我没有正确解释它。如果我忘记了一些明显的事情,我很高兴被嘲笑:) 也就是说,我一直在遵循这些相同的操作,而奥特莱斯也一直在列表中。

编辑2为了清楚起见,我删除了 ivar 声明,因为它似乎引起了大部分关注。

YouTube 上的渠道

编辑3好的,我似乎遇到了之前在这个问题另一个问题上看到的问题。基本上,如果我打开自定义类下拉列表,我只会看到一些“标准”类,例如 UIViewController。如果我选择其中任何一个,我就会得到奥特莱斯。例如,对于 UIViewController 我总是有 view->View。但是,我的项目的课程不在下拉列表中。手动输入名称似乎可行,但实际上不行。一定存在一些索引问题(除非我已经删除了其中的所有内容)

~/Library/Developer/Xcode/DerivedData/
Run Code Online (Sandbox Code Playgroud)

没有成功。如果您想尝试,我已将我的代码放在GitHub上。这并没有为我显示奥特莱斯,但它为其他一些人显示了 - 所以严格来说,这不是代码的“错误”。这更多是一个 XCode 问题。欢迎任何帮助!

编辑4我认为这就是问题所在:看右边。下拉菜单不显示“ViewController.h”类。如果我手动输入它,它似乎可以识别它,但实际上我怀疑它不能识别。以前,我总是在下拉菜单中看到项目类的完整列表。班级列表只是通用的

xcode objective-c ios xcode6 xcode6.1

1
推荐指数
1
解决办法
3425
查看次数

标签 统计

ios ×3

xcode ×2

interface-builder ×1

objective-c ×1

swift ×1

xcode6 ×1

xcode6.1 ×1

xib ×1