标签: awakefromnib

awakeFromNib什么时候被调用?

是否awakeFromNib得到所谓的viewController分配和初始化后,对不对?awakeFromNib调用视图控制器的精确点是什么?从我的调试会话中,我看到awakeFromNibrootViewController在[self.window makeKeyAndVisible]执行之前不会被调用.

ios awakefromnib

29
推荐指数
1
解决办法
3万
查看次数

swift中的awakeFromNib()和viewDidLoad()之间的区别

我想知道awakeFromNib()和viewDidLoad()之间的关键区别,以便更清楚地了解它是如何工作的.请有人解释一下吗?

viewdidload awakefromnib swift

29
推荐指数
1
解决办法
2万
查看次数

IBOutlet未在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.我在这做错了什么?

uiscrollview iboutlet ios awakefromnib

27
推荐指数
2
解决办法
1万
查看次数

在awakeFromNib() 上 - 错误实例成员“button”不能用于类型“CustomView”

我创建了一个自定义 UIView 作为 .xib 文件,其中 UIView 有一个按钮。我使用以下代码加载 UIView。

struct ContentView: View {
    var body: some View {
        CustomViewRepresentable()
    }
}

struct CustomViewRepresentable: UIViewRepresentable {
    typealias UIViewType = CustomView

    func makeUIView(context: UIViewRepresentableContext<CustomViewRepresentable>) -> CustomView {
        let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)![0] as! CustomView
        return customView
    }

    func updateUIView(_ uiView: CustomView, context: UIViewRepresentableContext<CustomViewRepresentable>) {
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义视图具有以下代码:

class CustomView: UIView {

    @IBOutlet weak var button: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

uiview ios awakefromnib swift swiftui

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

viewDidLoad和awakeFromNib时序

据我所知,awakeFromNib将始终在viewDidLoad之前调用.

所以我有一个UITableViewController的子类,它是从xib文件中取消归档的.

我在里面定义了这两个方法:

- (void)awakeFromNib {
  [super awakeFromNib];
  NSLog(@"awake from nib");
}

- (void)viewDidLoad {
  [super viewDidLoad];
  NSLog(@"view did load");
}
Run Code Online (Sandbox Code Playgroud)

会发生什么是"视图确实加载"出现在控制台中"从笔尖唤醒"之前.我试图在[超级awakeFromNib]上使用断点,并反复点击F7(Step Into),令我惊讶的是,它进入 - (void)viewDidLoad之前进入awakeFromNib内的第二行.

有谁知道这里发生了什么?我在常规UIViewController的子类中做了完全相同的事情,并且日志语句被反转,正如我最初期望的那样......

iphone uitableview viewdidload ipad awakefromnib

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

设置使用initWithNibName初始化的NSViewController的最佳方法:bundle:?

我有一个NSViewController的子类,它从一个nib加载它的视图(使用initWithNibName:bundle:它是该nib的文件所有者).

我需要在加载nib之后进行一些初始化,并且我希望我的代码最兼容:

  • 在ios中:有viewDidLoad方法可以做到这一点
  • 在osx中​​:在雪豹中,没有像viewDidLoad这样的方法,但是在文件的nib所有者上也调用了awakeFromNib

所以我的问题是:

  1. awakeFromNib是否还调用了Lion中文件的nib所有者?
  2. 如果我使用awakeFromNib,我是否需要调用[super awakeFromNib]?(NSViewController是否实现了awakeFromNib?)
  3. 如果答案1为是,这是一个很好的解决方案吗?:
- (void)initAfterNibLoaded {
   ...
}

- (void)viewDidLoad {
   // Code for ios
   [self initAfterNibLoaded];
}

- (void)awakeFromNib {
   // Code for osx

   // Not sure if necessary
   [super awakeFromNib];

   [self initAfterNibLoaded];
}
Run Code Online (Sandbox Code Playgroud)

如果答案1为否,这是一个很好的解决方案吗?:

- (void)viewDidLoad {
   // Initialize after nib loaded
}

#ifndef TARGET_OS_IPHONE
- (void)loadView {
   // Call parent method
   [super loadView];

   // Simulate viewDidLoad method
   [self viewDidLoad];
}
#endif
Run Code Online (Sandbox Code Playgroud)

谢谢

macos initialization nsviewcontroller ios awakefromnib

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

在awakeFromNib期间,自定义UIView的界限不正确 - 它们何时设置?

我有一个自定义的UIView,我使用Xcode(4)放置了它.我需要根据视图的实际边界设置一些默认状态.在awakeFromNib期间,边界似乎返回Xcode中storyboard布局中视图的大小.

视图位于UISplitViewController的详细端,在Xcode中是完整纵向iPad屏幕的大小,但如果应用程序以横向模式加载,则通过spring-and-struts,其大小会更改,但这似乎是发生在awakeFromNib之后.

我应该用其他方法设置这种状态吗?

uiview ios awakefromnib

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

awakeFromNib的好处?

我一直在学习coredata,通过制作许多基于xcode Navigation控制器模板的简单测试应用程序并选中"使用coredata".

App委托中的awakeFromNib方法一直是我的问题来源,因为我正在向控制器添加其他视图并更改加载顺序,因此RootViewController可能是第二个或第三个选择.

我已经弄清楚awakeFromNib正在做什么,我已经删除了它,因此app委托不再绑定到任何特定的视图.(所以当我想加载RootViewController时,我会将其作为常规视图加载,并使用自己的viewDidLoad为视图初始化managedObjectContext).

我的问题:在AppDelegate中使用awakeFromNIb是否有性能提升或其他好处?或者它只是我从viewDidLoad方法做同样的事情的另一种方式?

delegates views ios awakefromnib

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

获取awakeFromNib中的插座大小

我创建了一个UICollectionViewCell包含标签插座的自定义(放在故事板中).我想从awakeFromNib我的自定义方法中获取此标签的高度UICollectionViewCell,但标签的大小始终为0.000000:

// .h
@interface MyCustomCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UILabel *myLabel;

@end

// .m
@implementation MyCustomCell

-(void)awakeFromNib
{
    [super awakeFromNib];

    NSLog(@"%@", self.myLabel);
    NSLog(@"%f", self.myLabel.frame.size.width);
    NSLog(@"%f", self.myLabel.frame.size.height);
}

@end
Run Code Online (Sandbox Code Playgroud)

控制台输出:

2013-02-06 11:13:59.628 Test[8880:c07] <UILabel: 0x7649a00; frame = (0 0; 0 0); text = '12h00'; clipsToBounds = YES; opaque = NO; autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7649ac0>>
2013-02-06 11:13:59.628 Test[8880:c07] 0.000000
2013-02-06 11:13:59.630 Test[8880:c07] 0.000000
Run Code Online (Sandbox Code Playgroud)

如何获得标签的大小?在awakeFromNib被叫时获取此类信息还为时尚早吗?如果是这样,我的自定义单元格的哪种方法应该可以得到大小? …

objective-c ios awakefromnib

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

使用故事板时设置完成的TabBar图像?

我正在开发一个应用程序,其中大部分UI是通过Xcode中的Storyboard设置的.我想要做的一件事是在TabBar上为UITabBarItem指定"完成"图像,而不是可以通过Interface Builder访问的默认"Stencilled"图像.

我的问题是哪里是最好的地方,我目前在awakeFromNib中这样做,因为它需要在故事板上取消归档时完成,但我不确定我是否应该使用initWithCoder:相反,哪个最好呢?这很重要吗?

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        UIImage *tabIn  = [UIImage imageNamed:@"TAB_IN"];
        UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];

        UITabBarItem *tabBarItem = [self tabBarItem];
        [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
        [tabBarItem setTitle:@"TWO"];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)awakeFromNib {
    [super awakeFromNib];
    UIImage *tabIn  = [UIImage imageNamed:@"TAB_IN"];
    UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];

    UITabBarItem *tabBarItem = [self tabBarItem];
    [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
    [tabBarItem setTitle:@"TWO"];
}
Run Code Online (Sandbox Code Playgroud)

据我所知,initWithCoder:当出口和操作尚未连接时,在从nib(包含在故事板中)取消归档对象的开始时调用.我也理解awakeFromNib在unarchiving过程结束时调用它并发出viewController现在可以使用的信号.我的感觉是,它实际上只取决于你想做什么,虽然使用awakeFromNib可能证明问题较少,因为你不会遇到出口和行动还没有联系起来的问题.

编辑:

让我改这个,你会用什么情况下initWithCoder:作为并列于awakeFromNib反之亦然?

iphone cocoa-touch objective-c awakefromnib initwithcoder

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