簡體   English   中英

iOS Subclassed UIView - 如何從ViewController獲取UIButton調用方法?

[英]iOS Subclassed UIView - How to have UIButton call method from ViewController?

我有一個自定義的UIView我用來顯示一個popover(在iPhone上)。 在popover中有一些UIButtons,我需要從ViewController的類調用方法(不是UIView的類,而是顯示UIView的View)。

我該如何正確設置?

UIView按鈕代碼位於Custom UIView類中:

    UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [logoutButton setTitle:@"Logout" forState:UIControlStateNormal];
    [logoutButton setFrame:CGRectMake(0, 0, content.frame.size.width, 44)];
    [logoutButton addTarget:self.superview.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];
    [logoutButton setBackgroundImage:redImage forState:UIControlStateNormal];
    [logoutButton setBackgroundImage:redImageHighlight forState:UIControlStateHighlighted];
    [logoutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [content addSubview:logoutButton];

執行此操作的最佳方法是使用UIView子類中的委托模式在按下注銷按鈕時通知所有者。 在viewcontroller中創建視圖實例時,請將委托設置為self。

http://enroyed.com/ios/delegation-pattern-in-objective-c-and-writing-custom-delegates/結賬'寫自定義代表'

無法以上述代碼中嘗試的方式訪問連接到超級視圖的ViewController。

或者,您可以發布通知。 例如,發送應用程序范圍的消息,表示應該執行注銷。 查看NSNotificationCenter以了解如何執行此操作。

就像是:

[[NSNotificationCenter defaultCenter] postNotificationName:kShouldLogOutNotification object:nil];

編輯:您肯定希望在您的用例中使用委托。

這種事情通常是通過委托完成的, 委托是UIKit中使用頻繁的設計模式。 請參閱: iOS代表的目的是什么?

好的,我確實相信創建一個自定義委托是處理這個問題的正確方法。 但是,我確實發現這種方法正常工作(不確定它是否“正確”)

[logoutButton addTarget:self.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];

這似乎告訴按鈕使用它的superview(UIView)的類(ViewController)。 再次,不確定這是否是從主視圖控制器調用方法的正確/正確方法,但它沒有問題,因此它似乎可用。

暫無
暫無

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

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