Rab*_*bih 60 iphone uiscrollview uitextfield
当UITextField嵌入在a中的a UIScrollView成为第一响应者时,通过让用户输入某个字符,UIScrollView自动滚动到该字段,有没有办法禁用它?
Luk*_*uke 62
以Moshe的答案为基础......
子类UIScrollView并覆盖以下方法:
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)
把它留空.任务完成!
Tak*_*ano 56
我一直在努力解决同样的问题,最后我找到了解决方案.
我已经研究了如何通过跟踪调用跟踪来完成自动滚动,[UIFieldEditor scrollSelectionToVisible]并发现在输入字母时调用内部函数UITextField.这种方法似乎作用于UIScrollView最近的祖先UITextField.
所以,对textFieldDidBeginEditing,通过包装的UITextField一个新的UIScrollView与它相同的尺寸(即,在插入视图之间UITextField,它是上海华盈),这将阻止自动滚动.最后删除此包装textFieldDidEndEditing.
代码如下:
- (void)textFieldDidBeginEditing:(UITextField*)textField {
UIScrollView *wrap = [[[UIScrollView alloc] initWithFrame:textField.frame] autorelease];
[textField.superview addSubview:wrap];
[textField setFrame:CGRectMake(0, 0, textField.frame.size.width, textField.frame.size.height)];
[wrap addSubview: textField];
}
- (void)textFieldDidEndEditing:(UITextField*)textField {
UIScrollView *wrap = (UIScrollView *)textField.superview;
[textField setFrame:CGRectMake(wrap.frame.origin.x, wrap.frame.origin.y, wrap.frame.size.width, textField.frame.size.height)];
[wrap.superview addSubview:textField];
[wrap removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
我有同样的问题,禁用自动滚动的UITextView单元格UITableView.我能够使用以下方法解决它:
@interface MyTableViewController : UITableViewController<UITextViewDelegate>
@implementation MyTableViewController {
BOOL preventScrolling;
// ...
}
// ... set self as the delegate of the text view
- (void)textViewDidBeginEditing:(UITextView *)textView {
preventScrolling = YES;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (preventScrolling) {
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top) animated:NO];
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
preventScrolling = NO;
}
Run Code Online (Sandbox Code Playgroud)
scrollViewWillBeginDragging当用户自己启动滚动时,定义用于恢复默认滚动行为.
正如Taketo所提到的,当a UITextField成为第一响应者时,其第一个类型UIScrollView(如果存在)的父视图被滚动以使其UITextField可见.最简单的方法是简单地将每个UITextField包装在一个UIScrollView(或者理想情况下,将所有UITextField 包装在一个虚拟中UIScrollView).这与Taketo的解决方案非常相似,但它应该会给你稍微好一点的性能,并且它会使我的代码(或Interface Builder中的界面)更加清晰.
我不知道有任何属性UIScrollView可以实现这一点。恕我直言,如果能够禁用它,用户体验会很差。
也就是说,可以子类化UIScrollView并重写它的一些方法,以UITextfield在滚动之前检查它是否不是第一响应者。
| 归档时间: |
|
| 查看次数: |
23461 次 |
| 最近记录: |