我搜索了很多谷歌搜索和heree,但没什么用处。
我有两个文本区域,我无法识别哪一个失去了焦点 我尝试了所有选项,但没有。
此处为textFieldDidEndEditing
:
- (void) textFieldDidEndEditing:(UITextField *)textField {
NSLog(@"%@", [textField state]);
NSLog(@"%d", [textField isSelected]);
NSLog(@"%d", [textField isFirstResponder]);
NSLog(@"%d", [textField isHighlighted]);
NSLog(@"%d", [textField isTouchInside]);
if ( ![textField isFirstResponder] || ![textField isSelected] ) {
//if ( [textField state] != UIControlStateSelected) {
NSLog(@"not selected!");
[...]
// remove view / etc...
}
}
所有NSLog都返回0!为什么呢?!?
如何检测丢失的焦点?每次按下键盘按钮时,此方法都会调用,不仅仅是在结尾! 还有其他选择吗?
修改:
我不想从文本切换但我想在屏幕上点击任何时候检测丢失的焦点。 (键盘将关闭或不关闭,插入符号不在文本字段中)!
感谢。
答案 0 :(得分:3)
要处理点击外部文本字段,您可以在视图控制器中覆盖touchesBegan
:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
UITouch *touch = [[event allTouches] anyObject];
if ([textField1 isFirstResponder] && (textField1 != touch.view))
{
// textField1 lost focus
}
if ([textField2 isFirstResponder] && (textField2 != touch.view))
{
// textField2 lost focus
}
...
}
答案 1 :(得分:2)
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%d",textFiled.tag);
NSInteger nextTag = textField.tag + 1;
UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder) {
[nextResponder becomeFirstResponder];
} else {
[textField resignFirstResponder];
}
return YES;
}
带有标记的UITextField在textFieldShouldReturn方法中失去了焦点
这将帮助您从一个TextField转到另一个...只需在所有TextFields ex:0,1,2,3 ....等中设置标签
答案 2 :(得分:0)
这不是一个直接的答案,因为你问到失去焦点时如何处理。我认为有时候有明确的保存和取消按钮可以解雇。特别是在文本视图中,您希望保留返回键以用于其预期用途。
这是一个为键盘添加工具栏的类,其中包含"完成"和"取消"纽扣。我现在正在iOS 8中工作。我对iOS很陌生,所以可能有更好的方法来做到这一点。始终接受有关如何改进的建议。
... DismissableTextView.h
#import <UIKit/UIKit.h>
@interface DismissableTextView : UITextView
@end
... DismissableTextView.m
#import "DismissableTextView.h"
@implementation DismissableTextView
- (instancetype)init
{
self = [super init];
if (self) {
[self setInputView];
}
return self;
}
- (id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self setInputView];
}
return self;
}
- (void)awakeFromNib
{
[super awakeFromNib];
[self setInputView];
}
- (void) setInputView {
[self createToolbar];
}
-(void) createToolbar {
// Create toolbar for the keyboard so it can be dismissed...
UIToolbar* toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
toolbar.barStyle = UIBarStyleDefault;
toolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelClicked)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneClicked)],
nil];
[toolbar sizeToFit];
self.inputAccessoryView = toolbar;
}
- (IBAction)didBeginEditDescription:(id)sender
{
}
-(void)cancelClicked{
// respond to cancel click in the toolbar
[self resignFirstResponder];
}
-(void)doneClicked{
// respond to done click in the toolbar
[self resignFirstResponder];
}
@end
答案 3 :(得分:-3)
创建文本字段时,请为其指定不同的标记:
#define kSomeTag 100
textField.tag = kSomeTag;
在 - (void)textFieldDidEndEditing:(UITextField *)textField方法中,您可以通过查询其标记来判断哪个文本字段已结束编辑:
if (textField.tag == kSomeTag) {
// do something
}