[英]Setting Finished TabBar images when using storyboards?
我正在開發一個通過Xcode的Storyboard設置大部分UI的應用程序。 我想做的一件事是在TabBar上為UITabBarItems指定“完成”圖像,而不是可以通過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;
}
要么
- (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"];
}
我知道initWithCoder:
是在尚未連接出口和動作時,從筆尖(包含在情節提要中)取消存檔對象的開始時調用的。 我也了解到awakeFromNib
在取消存檔過程結束時被調用,並表示viewController現在可以使用了。 我的感覺是,這實際上僅取決於您要執行的操作,盡管使用awakeFromNib
可能會遇到較少的問題,因為您不會遇到尚未解決出口和行動的問題。
讓我重新說明一下,您將在哪種情況下使用initWithCoder:
與awakeFromNib
,反之亦然?
看來您已經在編輯前的段落中回答了自己的問題。
該文件指出
當對象收到awakeFromNib消息時,可以確保已設置其所有出口實例變量。
因此,如果必須在初始化代碼中訪問IBOutlet
Ivars,則必須在awakeFromNib
方法中進行操作。
盡管我更喜歡initWithCoder:
在不需要訪問插座的情況下,因為根據NSCoding
文檔,它是使用NSCoding
協議解碼的對象的正確初始化方法:
initWithCoder:指示對象從提供的編碼器中的數據初始化自身; 這樣,它將替換任何其他初始化方法,並且每個對象僅發送一次
但是,作為旁注,它並沒有太大的區別,在必須訪問初始化代碼中的出口的情況下,為了簡單起見,我不同時實現awakeFromNib
和initWithCoder:
因此,如果涉及到出口,我通常會實現awakeFromNib
並在那里進行所有初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.