我已經創建了UIView的子類,並且希望它發佈在Interface Builder(實際上是Xcode4)中顯示的自定義事件右鍵單擊Xcode 4設計器中的控件時,UIButton等控件的方式在「已發送事件」區域中有一堆事件。我知道我可以使用委託(通過協議)或通知(通過UINotificationCenter)讓特定事件發生時使用我的自定義視圖的對象知道,但我想知道「目標 - 作用機制」(描述在Cocoa Fundamentals Guide)是合適的/可取的/可能的,可以使用並與Xcode設計者集成。從主要的.NET背景來看,這種方法似乎與.NET事件模型密切相關,並且對我最有意義。將我自己的事件添加到我自己定製的UIView的Interface Builder菜單中的「發送事件」
11
A
回答
5
有UIControlEventApplicationReserved,它爲您提供了一系列您的應用可以使用的事件標識符。但是,我不認爲有任何方法可以告訴Interface Builder關於應用程序定義的事件,所以您不會像在UIControl的標準事件中發現的那樣,在IB中獲得與您的事件相同的支持。相反,您必須在代碼中爲每個應用定義的事件指定目標和操作。 (如果我誤解了這一點,請有人糾正我。)這並不困難,但有點不同。
3
一個簡單的方法是擴展UIControl
而不是UIView
,這將允許您將目標添加到所有默認事件(與UIButton
相同)。
注意:爲了讓我的自定義UIControl
處理事件,而不是我在其上分層的控件,我必須確保在所有分層控件上設置了userInteractionEnabled = NO
。
1
您可以使用IBOutletCollection完成此操作。這種方法的優點是可以在Interface Builder中鏈接對象。缺點是你不能直接鏈接到IBActions(如UIControl)。下面是一個使用協議乾淨實現:
ObserverProtocol.h
@protocol ObserverProtocol <NSObject>
- (void)observedObjectChanged:(id)sender;
@end
MyObject.h
@interface MyObject : NSObject
{
@private
IBOutletCollection(id<ObserverProtocol>) NSArray *observers;
}
- (void)objectChanged;
MyObject.m
@implementation MyObject
- (void)objectChanged
{
for (id<ObserverProtocol> observer in observers)
{
if ([observer respondsToSelector:@selector(observedObjectChanged:)])
{
[observer observedObjectChanged:self];
}
}
}
@end
然後你只需要實現ObserverProtocol在你想要觀察事件的類中(當然還要在Interface Builder中進行綁定)。
相關問題
- 1. Symfony2的我自己的事件
- 2. 添加事件mouseDown和mouseMove到我自己的類
- 3. 將我自己的事件添加到WPF控件中涉及什麼?
- 4. 如何將我自己的項目添加到菜單/牆紙?
- 5. 如何在Interface Builder中提供自己發送的消息
- 6. 我想執行我在自己製作的自定義事實
- 7. 將自己的自我傳遞給OnClick事件JavaScript
- 8. CodeMirror用'signal'觸發自己的事件
- 9. ASP.NET:如何爲我自己的控件處理回發事件?
- 10. 將自己的參數發送給事件處理程序?
- 11. 添加自己的內容到選項卡UI上的事件
- 12. jquery定義自己的事件?
- 13. 如何在jQuery中定義我自己的事件?
- 14. 添加控制面板在我自己的應用程序事件 - >聲音
- 15. 添加我自己的登錄到Umbraco
- 16. 將我自己的控件添加到工具箱
- 17. 爲右鍵單擊創建我自己的事件
- 18. 將自定義事件發送到我的Main類中的動態加載SWF
- 19. 在日曆事件的alertView中設置我自己的消息
- 20. 表單發佈自己,郵件自己發送。它是谷歌?
- 21. 發送短信我自己
- 22. 什麼阻止我將自己的簽名添加到事物中?
- 23. 的WinForms訂閱自己的事件
- 24. 如何將我自己的選項添加到Finder的右鍵菜單?
- 25. 在UIScrollView中使用我自己的UIView
- 26. 我可以在android上寫我自己的事件:imeOptions =「actionSearch」?
- 27. 如何將IO添加到Haskell中的我自己的monad中?
- 28. 爲自己定製的組件和事件處理程序
- 29. 我如何定製我自己的Observable?
- 30. 製作我自己的AsynchronousSocketChannel
啊,好的。必須提供「目標」似乎比設置委託更加複雜,儘管我想我可以讓我的自定義UIView作爲NSObject使用(通過屬性或方法),因此我的視圖不必包含頭文件對於在應用層次結構中位置較高並且緊密耦合的對象。我的猜測是,這是在設計器中進行連接時發生的情況,所以它可能是同樣的事情。它看起來好像是標準的,或者是首選的方法就是使用授權。我無法找到有關上述「目標 - 行動機制」的更多信息。 – dreyln 2011-04-25 22:06:05
他們非常相似的想法。視圖控制器通常是它所管理的視圖和控件的目標和/或委託。在這種情況下,它只會將'self'作爲目標,並將其中一個選擇器作爲調用'-addTarget:action:forControlEvents:'的動作。 – Caleb 2011-04-25 23:07:10