2012-07-24 35 views
0

Im新的Objective-C & iOS編程讓我對事件和動作處理非常困惑。我真的不明白將Interface builder中的按鈕與其文件所有者方法連接起來的區別(例如,用我的個人方法buttonClicked連接按鈕操作),並且另一方面創建將響應按鈕事件的委託?我很困惑,因爲我來自C#(.NET),並且你只能通過委託來處理事件。Objective-C解析事件和動作之間的區別

回答

1

讓我們先編程創建事件處理。一些假設...

  • 你有一流的MyViewController
  • 該類確實包含屬性myButtonUIButton *
  • 你想處理事件在這個類

第一步是創建方法來處理您的按鈕水龍頭:

-(void)onMyButtonTap:(UIButton *)sender { 
    // My button was tapped, whoa, which one is in sender argument 
} 

添加敲擊事件處理:

-(void)loadView { 
    [super loadView]; 
    [self.myButton addTarget:self action:@selector(onMyButtonTap:) forControlEvents: UIControlEventTouchUpInside]; 
} 

此代碼的用途是什麼?在這種情況下,selfMyViewController類的實例,它將處理內部事件觸發(addTarget)。 action是在UIControlEventTouchUpInside發生火災時調用的方法。

所以addTarget:...行添加事件處理和時控事件觸發,這...

[self onMyButtonTap:self.myButton]; 

...將自動被調用。

它簡單的例子,它可以在現實世界更爲複雜:

  • ,你可以在不同的UIViewUIButton(好的做法,我不喜歡當人們把他們在UIViewController
  • 可以處理多個按鈕水龍頭在一個法(sender參數區分它們)
  • 您可以創建更多的自來水處理方法,用於一個鍵一個方法,
  • ...

現在回到網點。奧特萊斯僅爲addTarget:...的自動膠水。

UIButtonUIControl的子類,在這裏您可以看到如何處理其他事件以及可以處理哪些事件。

代表團也是常見做法,但不適用於UIControl。沒有代表等,你必須這樣做。

或者您可以增強UIButton來處理通過塊的事件。以下是https://gist.github.com/2468899的一種方式,或者您可以通過Google獲取更多信息。

+0

如果插座是自動膠水,代碼在哪裏生成? – gorgi93 2012-07-24 13:33:58

+0

@gGololicic Visual Studio中的GUI設計器確實會生成實際的源代碼,這些源代碼可以按照設計構建GUI,因此在編譯時將GUI設置爲一成不變。 XCode中的GUI設計器不會生成源代碼。相反,它會生成一個.nib(有時也稱爲.xib),或者在iOS 5及更高版本的情況下生成.storyboard。 Nibs,xibs和storyboard可以被認爲是描述GUI的元數據,並且GUI在運行時從中生成。這有點像數據驅動的GUI。 – HairOfTheDog 2013-03-19 07:04:21

相關問題