UISwitch操作在iOS 10中不起作用

时间:2016-10-24 08:15:22

标签: ios objective-c ios10 uiswitch

我在表视图的一个单元格中有一个切换按钮。以前在iOS 9中,一切正常,点击切换按钮后会转到动作方法。但是在更新到iOS 10之后,动作方法永远不会被调用。任何人都有类似的问题吗?

cell.m

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        // Initialization code

        UIImageView *bgView = [[UIImageView alloc] initWithFrame:CGRectZero];
        [bgView setImage:[[UIImage imageNamed:@"customcell.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)]];
        [self setBackgroundView:bgView];


        UIImageView *selectedBgView = [[UIImageView alloc] initWithFrame:CGRectZero];
        [selectedBgView setImage:[[UIImage imageNamed:@"cellselect.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)]];

        [self setSelectedBackgroundView:selectedBgView];

        nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 13, 250, 40)];

        [nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin];

        [nameLabel setFont:[UIFont boldSystemFontOfSize:16]];
        [nameLabel setBackgroundColor:[UIColor clearColor]];
        [nameLabel setTextColor:[UIColor whiteColor]];

        [nameLabel setNumberOfLines:0];

        [self.contentView addSubview:nameLabel];

        switchButton = [[UISwitch alloc] initWithFrame: CGRectMake(230, 17, 100, 30)];

        [switchButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];

        [switchButton addTarget:self action:@selector(switchActivated:) forControlEvents:UIControlEventTouchUpInside];

        [switchButton setHidden:YES];

        [self.contentView addSubview:switchButton];

    }
    return self;
}

行动方法:

- (void) switchActivated:(id)sender
{
    if(switchButton.on)
    {
        [selectedItem setObject:@"YES" forKey:@"valueEntry"];
    }
    else 
    {
        [selectedItem setObject:@"NO" forKey:@"valueEntry"];
    }
}

ViewController.m 索引路径中行的单元格:

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

UITableViewCell *tableViewCell = [aTableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"homeReportCustomizationCell_%d",indexPath.row]];

        if(!tableViewCell)
        {
            tableViewCell = [[Cell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"Cell_%d",indexPath.row]];
        }
...........
}

2 个答案:

答案 0 :(得分:0)

只需更改UIControlEventTouchUpInside

中的[switchButton addTarget:self action:@selector(switchActivated:) forControlEvents:UIControlEventTouchUpInside];即可

收件人:UIControlEventValueChanged

答案 1 :(得分:0)

我有同样的问题!

我在UIScrollView中有一个UISwitch和一个UITextField。 我将scrollView添加到我的self.view。

我用运行iOS 10的iPad Pro进行了测试 - 在升级到最新版本的iOS之前,一切正常。 现在我的方法没有被调用!!

希望我不必采用程序化解决方案 - 这将是一个无赖。