我尝试用我选择的单元格中的文本用两个UIAlertView打开一个textfield。我使用以下代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(edit:)];
    tapRecognizer.numberOfTapsRequired = 2;
    [self.view addGestureRecognizer:tapRecognizer];

    [tapRecognizer requireGestureRecognizerToFail:tapRecognizer];


    CardTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"editCell" forIndexPath:indexPath];
    NSString *cellFirstText = cell.cellFirstText.text;
    NSString *cellSecondText = cell.cellSecondText.text;

    [[NSUserDefaults standardUserDefaults] setObject:cellFirstText forKey:@"cellFirstToEdit"];
    [[NSUserDefaults standardUserDefaults] setObject:cellSecondText forKey:@"cellSecondToEdit"];
}

-(void)edit: (UITapGestureRecognizer *)sender
{

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"save", nil];

    alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

    [[alert textFieldAtIndex:1] setSecureTextEntry:NO];

    [alert textFieldAtIndex:0].text = [[NSUserDefaults standardUserDefaults] objectForKey:@"cellFirstToEdit"];
    [alert textFieldAtIndex:1].text = [[NSUserDefaults standardUserDefaults] objectForKey:@"cellSecondToEdit"];

    alert.tag = 3;

    [alert show];
}


但是问题是,即使我在该行上单击(一个),文本也会更改为默认文本。我希望你明白我的意思。

最佳答案

我认为您的代码是错误的,因为您是在用户每次点击某个单元格时(而不是在单元格加载时)都创建一个UITapGestureRecognizer,并且您还将其分配给视图而不是单元格。

所以试试这个:

移动此代码:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(edit:)];
tapRecognizer.numberOfTapsRequired = 2;
[self.view addGestureRecognizer:tapRecognizer];

[tapRecognizer requireGestureRecognizerToFail:tapRecognizer];


初始化单元格后,将其添加到cellForRowAtIndexPath方法中,然后将[self.view addGestureRecognizer:tapRecognizer];更改为[cell addGestureRecognizer:tapRecognizer];会导致您想将手势添加到单元格而不是视图中。

我不知道这是否真的可以解决您的问题,但是我认为您的代码有两件事是错误的。从理论上讲,它应该起作用。

编辑:

另外,尝试将警报初始化上的消息设置为nil。另外,是否真的有必要使用NSUserDefaults存储这些变量?不能仅将它们存储在两个NSString属性中,还是出于某些原因而保留这些变量?

10-08 12:26