簡體   English   中英

使用情節提要板時設置完成的TabBar圖像?

[英]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:指示對象從提供的編碼器中的數據初始化自身; 這樣,它將替換任何其他初始化方法,並且每個對象僅發送一次

但是,作為旁注,它並沒有太大的區別,在必須訪問初始化代碼中的出口的情況下,為了簡單起見,我不同時實現awakeFromNibinitWithCoder: 因此,如果涉及到出口,我通常會實現awakeFromNib並在那里進行所有初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM