在子视图中关闭由UITextField触发的iPhone键盘

时间:2012-08-27 22:20:07

标签: iphone objective-c ios xcode

我的 ViewController 包含子视图

UIView 位于 NameSubViewController(带有XIB的课程)

子视图包含 UITextField


我添加了这个动作:

- (IBAction)textFieldReturn:(id)sender;

NameSubViewController 类中,并将其连接到XIB中的文件所有者的文本字段(在退出时结束)。

但是当我点击返回时,log会给我一条错误信息,模拟器中没有任何反应。

这是相关代码:


ViewController.h:

@property (nonatomic, strong) UIView *nameSubView;

ViewController.m(viewDidLoad):

UIViewController *nameController = [[NameSubViewController alloc] initWithNibName:@"NameSubViewController" bundle:nil];
nameSubView = [nameController view];

[self.view addSubview:nameSubView];

NameSubViewController.h:

#import <UIKit/UIKit.h>

@interface NameSubViewController : UIViewController

@property (nonatomic, strong) IBOutlet UITextField *textField;

- (IBAction)textFieldReturn:(id)sender;
//Not working.. Connected from files owner to textField with option didEndOnExit

NameSubViewController.m:

-(IBAction)textFieldReturn:(id)sender
{
[sender resignFirstResponder];
} 

当我点击返回时,我会在日志中收到此消息:

AppName[6656:f803] -[CALayer textFieldReturn:]: unrecognized selector sent to instance 0x6e99d40 2012-08-28 02:51:26.954 AppName[6656:f803] *** WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: <NSInvalidArgumentException> -[CALayer textFieldReturn:]: unrecognized selector sent to instance 0x6e99d40

键盘未被解雇。什么可能导致我的问题?

ViewController:

http://www.flickr.com/photos/80427098@N07/7877111708/in/photostream

NameSubViewController,显示在ViewController的子视图中的视图:

http://www.flickr.com/photos/80427098@N07/7877111596/in/photostream

2 个答案:

答案 0 :(得分:1)

您是否打算让代表成为CALayer? [CALayer textFieldReturn:]

现在,它是。

答案 1 :(得分:0)

我终于找到了解决方案。这很简单,我只需要为NameSubViewController的UIView创建一个类,并将textfieldReturn代码放在​​UIView类中:

#import <UIKit/UIKit.h>

@interface NameSubView : UIView

@property (nonatomic, strong) IBOutlet UITextField *textField;

- (IBAction)textFieldReturn:(id)sender;

@end

键盘正在返回!有道理,因为只有 UIView 作为主视图的子视图加载,没有子视图视图控制器。 ViewController永远不应该是另一个视图的子视图,只有它的视图应该是,所以代码必须写在子视图UIView类中。不是UIViewController类的子视图!