双击 UITableView
double Tap a UITableView
我尝试用我选择的单元格中的文本打开一个 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];
}
但问题是,即使我在该行上单击 (ones),文本也会更改为默认文本。希望你明白我的意思。
我认为你的代码是错误的,因为你在每次用户点击单元格时创建一个 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 属性中,还是您出于某种原因保留了这些变量?
我尝试用我选择的单元格中的文本打开一个 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];
}
但问题是,即使我在该行上单击 (ones),文本也会更改为默认文本。希望你明白我的意思。
我认为你的代码是错误的,因为你在每次用户点击单元格时创建一个 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 属性中,还是您出于某种原因保留了这些变量?