2010-08-11 56 views
7

我有一個UITableView與單元格包含UISwitch控件。它類似於在iPhone的時鐘應用如下表視圖...如果我將UISwitch控件添加到每個表格視圖單元格中,我如何知道它屬於哪個單元格?

alt text http://epicself.com/wp-content/uploads/2009/04/1-1.jpg

在我的應用程序的cellForRowAtIndexPath方法,我創建並附加UISwitch控制是這樣的...

CGRect frameSwitch = CGRectMake(215.0, 10.0, 94.0, 27.0); 
UISwitch *switchEnabled = [[UISwitch alloc] initWithFrame:frameSwitch]; 
[switchEnabled addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged]; 

cell.accessoryView = switchEnabled; 

我的問題是,當用戶切換開關並調用switchToggled方法時,如何知道它屬於哪個表格單元?如果不知道它的背景,我無法真正做到。

非常感謝提前對你的幫助!

回答

9

在你的操作方法,你可以投傳入的UISwitch(這是UITableViewCell本身)的superview,然後通過即到tableViewindexPathForCell方法。

indexPathForCell將返回一個NSIndexPath對象,然後您可以使用它來索引您的數據模型以進行修改。那麼你所要做的就是在tableView上撥打reloadData

此外,在cellForRowAtIndexPath,您應該根據您的模型設置UISwitch的狀態。

+1

這實際上是一個更好的方法,因爲它沒有使用標籤屬性,這通常是可用的好東西,謝謝! – BeachRunnerFred 2010-09-05 01:59:18

+5

只爲那些仍然在superview中發現問題的人,有時您需要指向控件的超級視圖的超級視圖,因爲控件可能位於UITableViewCellContentView中。 UITableViewCellContentView的超級視圖將是必需的UITableViewCell – mrd3650 2012-04-04 16:13:09

9

首先,修復內存泄漏:

UISwitch *switchEnabled = [[[UISwitch alloc] initWithFrame:frameSwitch] autorelease]; 

然後,選擇下列選項之一:

switchEnabled.tag = someInt; // before adding it to the cell 

NSLog(@"switched %d",switch.tag); // to see which switch was toggled 

UITableViewCell *parentCell = switchEnabled.superview; 
// + some magic to see which cell this actually is 
+0

用於'.tag'的+1。這是最簡單的方法。用索引加載到您填充表格的數據數組中。 – 2010-08-11 20:29:09

+0

謝謝,mvds!標籤屬性將很好地做!沒有泄漏,我只是忘記在問題中包含我的發佈呼叫。 – BeachRunnerFred 2010-08-11 20:31:10

相關問題