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