2012-04-21 22 views
6

到目前爲止,我只需要實現具有預定義設計(正常,字幕等)的原型單元,並沒有出現問題。帶有UIControls的iOS原型單元內

現在我需要實現包含像分段開關,開關或任何其他控件的原型單元。問題是我沒有能夠找出觸發的行爲是如何實施的,以及它們與控制有什麼關係。另外我還沒有找到任何示例說明如何在單個UITableViewController中實現不同的原型單元。

我知道這是一個通用的問題,但我很欣賞這裏的一些指針。也許有人知道一些文檔,教程等,那麼,任何幫助會做,

Thnaks提前。

回答

11

我花了一段時間才瞭解如何使用原型單元。如果要訪問原型單元格內的用戶界面元素,則必須創建UITableViewCell的子類並將其分配給Interface Builder中的原型單元。 然後,你必須手動e.g定義IBOutlet中屬性:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

在這之後,就可以通過控制拖動從元件到屬性定義在輔助視圖連接界面元素。 可以在擁有的View Controller中定義IBActions。您可以控制 - 從界面元素拖動到View Controller頭文件並創建一個操作。在動作實現中,您可能想知道哪個單元格正在觸發動作。我不喜歡這樣寫道:

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

尋找相應的細胞和索引路徑(由jrturton)另一種解決方案:

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

雖然這是一個有點古怪,我還沒有找到一個更好的解決方案至今。希望有所幫助。

+1

幾分鐘前,我發現了這個視頻(及其第二部分):http://youtu.be/0AsChJk422c它或多或少是你解釋的,但他/她使用了一個委託。原理相同,但看起來更乾淨一點。感謝您的回答 ! – Marcal 2012-04-21 12:20:54

+0

這確實是一個更清潔的解決方案。感謝指針。儘管所有協議都有一些樣板代碼。 – Sbhklr 2012-04-21 12:48:03

+1

找到控制行的更好方法可以在我的答案中找到:http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton 2012-04-21 15:29:23

相關問題