我有一个表视图,需要一个用于添加内容的子视图。 子视图包含用于输入文本的 UITextView。 在 7.1 之前,将发生以下情况:
- 子视图通过滚动视图粘附到表视图的底部 视图
- 激活后,将显示键盘,视图与键盘一起动画化
- 键入文本时,如果需要,textView 将向上展开,文本视图的底部保持不变。
现在在 7.1 之后,将发生以下行为:
- 子视图向上动画,键盘精细
- 如果文本强制换行,而不是展开,则文本视图DidEndEdit将触发,键盘将关闭。
- 文本视图中不允许进一步编辑,任何编辑都会立即关闭键盘。
关于 7.1 发生了哪些变化会使现有的工作代码中断的任何建议? 这是所有相关代码。 我很乐意提供任何其他详细信息。 我已经有一段时间了,它让我精神上。
tableViewController.m - 在子视图中添加的代码。 子视图有自己的 xib。 xib 是在 IB 中创建的。 我删除了与其他组件相关的部分。
- (void)viewDidLoad {
//Setup contentBar
if (self.contentBar == nil) {
//Add subView to View
NSArray *subviewArray = [[NSArray alloc] init];
subviewArray = [[NSBundle mainBundle] loadNibNamed:contentIdentifier owner:self options:nil];
self.contentBar = [subviewArray objectAtIndex:0];
[self.view addSubview:self.contentBar];
//Setup textView
UITextView *addContentTextView = (UITextView *)[self.contentBar viewWithTag:2];
addContentTextView.text = [NSString stringWithFormat:@"text (optional)"];
addContentTextView.delegate = self;
}
}
我的文本查看委托
#pragma mark - TextView Delegate
- (void)textViewDidEndEditing:(UITextView *)textView{
NSLog(@"textViewDidEndEditing:");
if ([textView.text isEqualToString:@""]) {
textView.text = @"text (optional)";
textView.textColor = [UIColor lightGrayColor]; //optional
}
[textView resignFirstResponder];
}
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"textViewDidBeginEditing:");
if ([textView.text isEqualToString:@"text (optional)"]) {
textView.text = @"";
textView.textColor = [UIColor blackColor]; //optional
}
[textView becomeFirstResponder];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];
if ([newText length] > 0 || _image) {
_addContentButton.enabled = YES;
} else {
_addContentButton.enabled = NO;
}
if([text isEqualToString:[text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]]) {
return YES;
} else {
NSLog(@"return pressed");
[textView resignFirstResponder];
[self addedContent:nil];
}
return YES;
}
- (void)textViewDidChange:(UITextView *)textView
{
NSLog(@"textViewDidChange");
[self sizeTextView];
}
- (void)sizeTextView
{
NSLog(@"sizeTextView");
UIImageView *barImage = (UIImageView *)[self.contentBar viewWithTag:87];
UITextView *textView = (UITextView *)[self.contentBar viewWithTag:2];
CGSize sizeThatShouldFitTheContent = [textView sizeThatFits:textView.frame.size];
CGRect newTextViewFrame = textView.frame;
newTextViewFrame.size.height = sizeThatShouldFitTheContent.height;
CGFloat adjustment = sizeThatShouldFitTheContent.height - textView.frame.size.height;
newTextViewFrame.origin.y = textView.frame.origin.y - adjustment;
textView.frame = newTextViewFrame;
CGRect newImageViewFrame = barImage.frame;
newImageViewFrame.size.height = barImage.frame.size.height + adjustment;
newImageViewFrame.origin.y = barImage.frame.origin.y - adjustment;
barImage.frame = newImageViewFrame;
}
如果您想查看其他内容,我很乐意发布。
我已经通过实现以下内容解决了这个问题:
- 将我的表视图控制器
- 重写为标准视图控制器,而不是表视图控制器
- 向视图控制器添加了一个表视图和一个单独的"contentWrapper"视图。
- 内容包装器包含如下所示的示例:https://github.com/datwelk/RDRStickyKeyboardView
我仍然不确定iOS 7.1中是什么导致了这个问题,但是使用RDRStickyKeyboardView效果很好,解决了我的所有问题。
我读过表视图不应该是其他视图的父视图,因此此解决方案也适用于良好的编码实践。