UITableViewCell的contentView中的UITextField的值获取有几种方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableViewCell的contentView中的UITextField的值获取有几种方法相关的知识,希望对你有一定的参考价值。
参考技术A UITableViewCell的contentView中的UITextField的值获取有几种方法,本人简单总结一下。1. 获取UITextField所以Cell的NSIndexPath,知道了NSIndexPath就知道了这个UITextField是干什么的了。
可以在
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
//get cell
UITableViewCell *cell = [UITableViewCell ][[textField superview] superview];
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
或
- (void)textFieldDidEndEditing:(UITextField *)textField
//get cell
UITableViewCell *cell = (UITableViewCell *)[[textField superview] superview];
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
中得知道UITextField中text是哪一个数据结构的值,前一个是实时的,后一个是失去焦点时一次性的。
2。第二种方法与上面第一个有点类似也是实时的,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath NSInteger row = [indexPath row]; static NSString *CellIdentifier = @"CellIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.textLabel.text = [_passwordArray objectAtIndex:row]; CGRect textFieldRect = CGRectMake(0.0, 0.0f, 215.0f, 31.0f); UITextField *theTextField = [[UITextField alloc] initWithFrame:textFieldRect]; theTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; theTextField.returnKeyType = UIReturnKeyDone; theTextField.secureTextEntry = YES; theTextField.clearButtonMode = YES; theTextField.tag = row; theTextField.delegate = self; //此方法为关键方法 [theTextField addTarget:self action:@selector(textFieldWithText:) forControlEvents:UIControlEventEditingChanged]; switch (row) case 0: theTextField.placeholder = @"请输入旧密码"; break; case 1: theTextField.placeholder = @"请输入新密码"; break; case 2: theTextField.placeholder = @"请再次输入新密码"; break; default: break; cell.accessoryView = theTextField; [theTextField release]; return cell; - (void)textFieldWithText:(UITextField *)textField switch (textField.tag) case 0: self.theOldPassword = textField.text; break; case 1: self.theNewPassword = textField.text; break; case 2: self.theTwiceNewPassword = textField.text; break; default: break; 本回答被提问者和网友采纳
iPhone X 上的 UITableViewCell contentView inset
【中文标题】iPhone X 上的 UITableViewCell contentView inset【英文标题】:UITableViewCell contentView inset on iPhone X 【发布时间】:2017-11-13 17:52:14 【问题描述】:在 iPhone X 上创建的任何 UITableViewCell 都有一个 44 点的内容视图插入。这意味着 UITableViewCell 的 contentView 的宽度默认比单元格宽度小 44pts。我不需要有这种行为。如何获得与单元格宽度相同的 contentView 宽度(或者像其他 iPhone 型号一样)?
更新:我通过设置 tableView.insetsContentViewsToSafeArea = NO 解决了这个问题。现在为 UINavigationBar 项目等其他元素处理相同的问题。导航栏的 UIBarButtonItem 找不到等效项。任何见解都值得赞赏。
【问题讨论】:
【参考方案1】:也许你可以在你的视图控制器上使用额外的SafeAreaInsets,它可以减少实际可用空间,但如果使用负Insets,它应该做相反的事情。
https://developer.apple.com/documentation/uikit/uiviewcontroller/2902284-additionalsafeareainsets
【讨论】:
self.navigationController.additionalSafeAreaInsets = UIEdgeInsetsMake(0, -44, 0, -44) 有效,而不是 viewController。【参考方案2】:在您的表格视图中将 insetsContentViewsToSafeArea
设置为 false。
tableview.insetsContentViewsToSafeArea = false
【讨论】:
以上是关于UITableViewCell的contentView中的UITextField的值获取有几种方法的主要内容,如果未能解决你的问题,请参考以下文章
iPhone X 上的 UITableViewCell contentView inset
iOS 8:UITableViewCell.contentView 不会调整其中的子视图大小
在 iOS 13 中处理已更改的 AccessoryType 大小
突出显示的 UITableViewCell 和选定的 UITableViewCell 有啥区别?