[英]One IBAction for multiple custom prototype cells with buttons
使用情節提要,我有一個包含多個動態原型單元的表格視圖控制器。 其中一個單元是一個自定義動態原型單元(我為其創建了一個子類),其中包含一個標簽和一個開關。 我將開關的動作連接到視圖控制器中的動作方法(例如switchChanged :)。 在cellForRowAtIndexPath中,我配置並返回適合於指定索引的單元格。 到現在為止還挺好。
問題是:我的應用程序具有這些自定義單元的多個實例,那么如何區分哪個開關已更改? 一個想法是,在視圖控制器中,我可以為每個單元格創建一個成員開關,並在第一次調用cellForRowAtIndexPath時將它們鏈接到特定的單元格開關。 然后,我可以使用這些成員開關與傳遞到switchChanged:的開關進行比較。
我知道我可以嘗試並得到立即的答案,但是我希望討論其他開發人員如何完成我的工作。 這是最好/最壞/確定的方法嗎?有什么實際的選擇?
問候,
- 約翰
我曾經遇到過這種情況(不適用於開關,但我相信它也是如此)。 我設法通過子類化對象類並在子類內添加所需的屬性/方法來解決它。
調用操作時,發送者將是子類,您可以在其中訪問添加的代碼。
我不知道是否是這種情況,但是如果您僅嘗試更改值,則在創建對象時應使用將開關值綁定到屬性。 它甚至不需要IBAction來調用。
編輯:示例:
@interface MySwitch : UISwitch
@property (nonatomic, assign) NSUInteger someProperty;
@end
然后,每次創建單元格時,都可以將“ someProperty”設置為所需的任何值。
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
// yada yada yada...
UITableViewCell *cell;
// yada yada yada...
[cell.myLinkedSwitch setSomeProperty:indexPath.row];
return(cell);
}
除非您不使用tableView:cellForRowAtIndexPath:
方法創建單元格,否則將無法使用。 然后,您可能應該使用綁定將您的價值放到正確的地方。
我沒有添加單獨的子類,而是將行存儲在每個按鈕的“禁用標題”屬性中。 這項工作非常輕松。 第一個代碼在CellForRowAtIndexPath中:
NSString *strRow = [[NSString alloc] initWithFormat:@"%i",useRow];
[btnPreferredChk setTitle:strRow forState:UIControlStateDisabled];
然后,我的按鈕操作方法將使用該值來執行適當的活動。
- (IBAction)goStorePick:(id)sender
{
UIButton *useButton = [[UIButton alloc] init];
useButton = sender;
NSInteger *storeRow = [[useButton titleForState:UIControlStateDisabled] integerValue];
NSString *CMIMsg = [[NSString alloc] initWithFormat:@"goStorePick Method Executed at Row: %i", storeRow];
[self shwMessage:CMIMsg];
}
這對我來說很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.