簡體   English   中英

從視圖控制器訪問接口構建器對象

[英]Accessing interface builder object from view controller

我對Objective-C,XCode和iOS開發是完全陌生的,並且我試圖找出在實例化所有UI視圖和控件之后如何在啟動時運行某些代碼的方法。 我有一個通用的NSObject,可以通過將其拖動到視圖控制器場景中來通過界面生成器添加。 它的定義如下:

#import <Foundation/Foundation.h>

@interface Controller : NSObject {
    IBOutlet UISlider *slider;        
    IBOutlet UILabel *label;
}

-(IBAction)sliderChanged:(id)sender;

@end

我需要在初始化時運行sliderChanged。 我嘗試了以下方法:

#import "Controller.h"

@implementation Controller

-(id)init {
    self = [super init];
    if (self){
        [self sliderChanged:nil];
    }
    return self;
}
// More code here

但是,當我調用它時,我的滑塊和標簽都為零。 我知道ViewController類中有一個viewDidLoad方法,可能是我所需要的,但是我不確定如何從中訪問我的Controller類的實例(它似乎是由界面生成器實例化的)。方法。 是否應該將所有這些代碼簡單地移到ViewController本身? 這似乎是有道理的,但是上面的設計是我們在課堂上得到的指導,因此我不確定如何執行此操作。

XIB / Storyboard加載器完成所有對象的加載並進行接線后,它將awakeFromNib發送到從XIB實例化的每個對象。 因此,請嘗試將其添加到Controller類中:

- (void)awakeFromNib {
    [super awakeFromNib];
    [self sliderChanged:nil];
}

您可以在《 NSObject UIKit添加參考》資源編程指南 》中的“筆尖對象生命周期”中找到更多信息。

但是 ,如果你創建Controller作為一個頂級對象,而你沒有任何插座連接它,那么XIB裝載機為完成后,這樣系統就會重新釋放它沒有引用它。 那可能不是您想要的,因此您應該將視圖控制器中的插座連接到Controller 如果這樣做(並且將出口命名為controller ),則可以在視圖控制器類的viewDidLoad中訪問它:

#import <UIKit/UIKit.h>
#import "Controller.h"

@interface ViewController : UIViewController {
    IBOutlet Controller *controller;
}
@end

實現方式:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.controller sliderChanged:self];
}

暫無
暫無

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

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