2012-11-05 435 views
0

我是iOS開發的初學者。我有一個自定義視圖:在它ios在自定義視圖和視圖控制器之間傳遞數據

MyView *myView = [[MyView alloc]initWithFrame:myFrame]; 
[self.view addSubview:myView]; 

@interface MyView : UIView { 

在視圖控制器,我添加了這種觀點作爲一個子視圖(會更好,以另一種方式做,也許在故事板?) ,我按照屏幕上的觸摸,和我有一個touchesEnded方法:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // myValue is a class variable of MyView 
    myValue = doSomething(); 
} 

現在,我怎麼能得到的myValue在ViewController中的價值?也許可以在MyView中的touchesEnded內部調用的偵聽器或回調函數?

回答

0

。例如MyView的屬性,你可以發佈NSNotificationtouchesEnded視圖的方法:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDidTouch" object:self]; 

在您的視圖控制器中偵聽此通知。爲了實現在視圖控制器的方法添加的viewDidLoad行:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onViewDidTouch:) name:@"ViewDidTouch" object:nil]; 

,然後實現以下方法,在您的視圖控制器:

- (void) onViewDidTouch:(NSNotification*)notification 
{ 
    // do something 
} 
0

那麼,一個簡單的方法是保持到視圖控制器的引用在MyView,例如,定義諸如屬性:

@property (weak,nonatomic) MyViewController *viewController; 

然後在視圖控制器分配myView.viewController = self。這樣,您就可以從MyView調用視圖控制器上的任何方法,例如[viewController myView:self changedValue:myValue]或其他。

(是的,它可以添加自定義視圖中的子類直接在故事板。只需添加在故事板的通用UIView並改變其類MyView。)

當然也有許多替代的方式,例如,通知,或者乾脆從輪詢如果只在特定的時間興趣,視圖控制器等

相關問題