Sof*_*LLC 27 uiscrollview iboutlet ios awakefromnib
此处链接的示例代码效果很好,允许UIScrollView显示图像,其中包含分页和预览当前图像之前和之后的图像:
我试图将该示例封装在可以重用的单个控件中.所以我创建了一个PagingScrollView:
@interface PagingScrollView : UIView {
IBOutlet UIScrollView * scrollView;
}
@property (nonatomic,retain) IBOutlet UIScrollView * scrollView;
@end
Run Code Online (Sandbox Code Playgroud)
用泥土简单实施
- (void) awakeFromNib
{
[super awakeFromNib];
NSLog(@"awake from nib");
}
Run Code Online (Sandbox Code Playgroud)
在PagingScrollView.xib中,我将包含UIScrollView和ARScrollViewEnhancer的View与原始ScrollViewPagingExampleViewController xib完全相同.其File's Owner的类设置为PagingScrollView,其scrollView插槽设置为子UIScrollView.
在ScrollViewPagingExampleViewController中,我只是声明:
IBOutlet PagingScrollView *pagingScrollView;
Run Code Online (Sandbox Code Playgroud)
在IB中,我拖动一个View,将其类设置为PagingScrollView,并将其pagingScrollView插座连接到PagingScrollView.
在awakeFromNib中,scrollView属性为nil.我认为既然scrollView在同一个笔尖中连接在IB中,那么它就可以使用了.
令人困惑的是,在ScrollViewPagingExampleViewController.xib中,有一个名为scrollView的空插座.这可能表明PagingScrollView的实例与PagingScrollView.xib中定义的实例不同.
因此,我无法使用实际的子视图填充UIScrollView.我在这做错了什么?
ash*_*ack 13
这里有一个非常好的答案:在awakeFromNib中访问View?
简而言之,视图可能会加载到awakeFromNib中,但其内容会被懒惰地加载,这就是为什么你应该使用viewDidLoad而不是awakeFromNib来实现你想要实现的目标.
对于在Swift 4中找到合适答案的任何人,这里就去。
override func awakeAfter(using aDecoder: NSCoder) -> Any? {
guard subviews.isEmpty else { return self }
return Bundle.main.loadNibNamed("MainNavbar", owner: nil, options: nil)?.first
}
Run Code Online (Sandbox Code Playgroud)
虽然,我发现真正的秘密是您不继承.xib文件的主视图。而是使文件所有者成为您想要的类,并在类init内添加Nib:
let bundle: Bundle = Bundle(for: type(of: self))
let nib: UINib = UINib(nibName: "<Nib File Name>", bundle: bundle)
if let view = nib.instantiate(withOwner: self, options: nil).first as? UIView {
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.translatesAutoresizingMaskIntoConstraints = true
addSubview(view)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13285 次 |
| 最近记录: |