簡體   English   中英

一個IBAction用於帶有按鈕的多個自定義原型單元

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM