消除滚动上表视图元素的重复

时间:2013-12-08 07:38:21

标签: 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;
}

1 个答案:

答案 0 :(得分:0)

试试这个:

UISwitch init方法说什么

- (id)initWithFrame:(CGRect)frame
  

参数

     

定义UISwitch对象框架的矩形。此矩形的大小组件将被忽略。

  

讨论

UISwitch会覆盖initWithFrame:并强制执行适合控件的大小

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

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


            notificationSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
            [notificationSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
            notificationSwitch.tag = 101;

            cell.accessoryView = switchView;
        }

       if(!notificationSwitch) {
           notificationSwitch = (UISwitch*)[cell.accessoryView viewWithTag:101];

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

        switch (indexPath.section) {
            case 0:
                cell.textLabel.text = restaurant.name;
                cell.detailTextLabel.text = restaurant.hours;
                break;
            default:
                cell.textLabel.text = @"oh no!";
        }
        return cell;
    }