[英]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.