2013-06-27 91 views
1

我有一個UITableView帶有5個部分和每個部分中有多個不同的行。在iOS中滾動TableView時保留表格單元值

TableView with Sections

我的代碼添加UISwitch到的TableView

switchForNotification = [[UISwitch alloc]initWithFrame:CGRectMake(300, 10, 100, 40)]; 
[switchForNotification addTarget:self action:@selector(Notification) forControlEvents:UIControlEventValueChanged]; 
switchForNotification.on = NO; 

[cell.contentView addSubview:switchForNotification]; 

所以,它會加入到TableViewCell。
但是,當我滾動時,Table使用UITableView方法相應地重新加載,並且開關將被添加到其他單元格中。

我想要防止在滾動和重新加載時自動將自定義控件添加到單元格中的問題。

我該怎麼做?

任何建議,將不勝感激。

在此先感謝。

+0

你如何確定放置UISwitch的位置?哪裏不是?你是否通過某種方式追蹤它? – Meera

+0

使用indexpath確定行和部分。如果您使用單元格,那麼每次需要配置單元時都是如此。 – Ashim

+2

顯示你的'cellForRowAtIndexPath'代碼 – Wain

回答

3

你可以包含一個UILable,UISwitch和一個UIImageView的自定義單元格...

現在按indexpath.row顯示和隱藏這個子視圖按照你的需要。

+0

好吧。它工作正常..感謝隊友。:) –

2

試試看看這個代碼。添加此代碼在您的cellFotRowAtIndexPath

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews]; 
for (UIView *subview in subviews) 
{ 
    if([subview isKindOfClass:[UIView class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UIImageView class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UILabel class]]) 
     [subview removeFromSuperview]; 
    else if([subview isKindOfClass:[UISwitch class]]) 
     [subview removeFromSuperview]; 
} 

[subviews release]; 
+0

不能正常工作.. :( –

+0

好吧。它會刪除開關。但是,不再顯示。 –

0

你需要做的是有幾個UITableViewCell不同情況取決於許多不同類型的表格觀察室你怎麼有。

每個都被分配一個重用標識符。

然後,在cellForRowAtIndexPath中,根據indexPath的部分或行,您將適當的單元格出列,設置任何數據並返回該單元格。

因此,例如,假設有三個類型切換,圖像,和其它細胞的,你會出列如下:

static NSString *kCellReuseIdentifierSwitch = @"SwitchCell"; 
static NSString *kCellReuseIdentifierImage = @"ImageCell"; 
static NSString *kCellReuseIdentifierOther = @"OtherCell"; 


if (indexPath.row == 0) 
{ 
    MySwitchCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierSwitch forIndexPath:indexPath]; 
} 
else if (indexPath.row == 1) 
{ 
    MyImageCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierImage forIndexPath:indexPath]; 
} 
else if (indexPath.row == 2) 
{ 
    MyOtherCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierOther forIndexPath:indexPath]; 
} 

這個例子假設的iOS 6或以上,其中細胞實例化被用於處理你通過dequeue方法。

0
if (cell==nil){cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
        reuseIdentifier:CellIdentifier]; } 
相關問題