表视图元素的重复

时间:2013-12-08 09:07:03

标签: ios objective-c uitableview uikit

嗨,我知道之前已经问过这个问题了。我试过以前的解决方案,但遗憾的是无济于事。我想要做的是让我的UISwitch出现,而不是在桌面视图上滚动时重复自己。这是我目前的尝试,但UISwitch根本没有显示。任何关于我做错事的帮助都将不胜感激!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"RestaurantCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    Restaurant *restaurant = [restaurants objectAtIndex:indexPath.row];

    UISwitch *notificationSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(245, 15, 79, 27)];
    [notificationSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
    [cell.contentView addSubview:notificationSwitch];

    cell.textLabel.text = restaurant.name;
    cell.detailTextLabel.text = restaurant.hours;
    return cell;
}

2 个答案:

答案 0 :(得分:1)

  

我想要做的是让我的UISwitch出现,而不是在桌面视图上滚动时重复自己

您似乎希望在所有单元格中显示一个UISwitch 要解决此问题,不应在-cellForRowAtIndexPath中创建对象,而应将此代码移至-viewDidLoad,然后将此对象放在可重复使用的单元格上。


基本上...
这应该在您的-viewDidLoad

//IMPORTANT: declare "UISwitch *notificationSwitch;" in the .h of this class
notificationSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(245, 15, 79, 27)];
[notificationSwitch addTarget:self
                       action:@selector(switchChanged:)
             forControlEvents:UIControlEventValueChanged];

只有这一点应该保留在-cellForRowAtIndexPath

[cell.contentView addSubview:notificationSwitch];

因此我们只创建一次对象并多次将相同的对象添加到单元格而不是在-cellForRowAtIndexPath中创建多个对象(只看起来相同但实际上是不同的对象


PS:我假设您的委托和数据源已正确连接,即执行流程确实达到-cellForRowAtIndexPath

答案 1 :(得分:0)

尝试使用此代码而不是我的静态文本,您将放置文本。它对我有用!

You can see the structure of cell Attached Image

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *cellIdentifier = @"CellIdentifer";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1  reuseIdentifier:cellIdentifier];

    }

    UISwitch *notificationSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(150, 5, 79, 27)];
    [notificationSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
    [cell.contentView addSubview:notificationSwitch];

    cell.textLabel.text = [NSString stringWithFormat:@"text label %d",indexPath.row];
    cell.detailTextLabel.text =[NSString stringWithFormat:@"detail label %d",indexPath.row] ;
    return cell;

}