无论我读了多少,我都坚持使用iOS中的一个概念,我似乎无法理解.我试图用自定义设计覆盖标准iOS数字键盘.当用户触摸UITextField时,我希望显示自定义inputView而不是标准数字键盘.
我为我的自定义inputView创建了一个单独的.h / .m / .xib ViewController类,名为“customInputViewController”现在,它只是一个黑暗的背景和一个按钮,当触摸UITextField时,它会遮挡大约一半的屏幕(类似于数字垫,但它看起来不同).当我单击自定义inputView中的一个按钮时,我的实现失败 – iOS会抛出EXC_BAD_ACCESS错误.
这是我在运行时加载.xib文件并将自定义inputView附加到UITextField对象的方法:
UIViewController *v = [[customInputViewController alloc] initWithNibName:@"customInputDesign" bundle:nil]; myTextInput.inputView = v.view;
在自定义inputView的.xib文件中,我将File的Owner设置为“customInputViewController”,然后创建了一个(IBAction)方法并将其附加到UIButton.单击该按钮时,(IBAction)设置为发送NSLog(@“按钮单击”)消息.没什么特别的.它只是一个简单的样板实现,继续引发错误.
也许我这样做完全错了.有谁可以提供一个简单的例子?
解决方法
视图v.view被保留,因为inputView属性被定义为(readwrite,retain).但是,如果在单击输入按钮之前在某处释放customInputViewController v,则会出现崩溃(EXC_BAD_ACCESS)
您可以在主控制器中尝试:
- (IBAction) keyboardButtonClicked { NSLog(@"keyboard Button Clicked"); } - (void) viewDidLoad { // do your stuff here ... UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,320,100)]; // add autorelease if you don't use ARC v.backgroundColor = [UIColor darkGrayColor]; UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; [b setTitle:@"Test button" forState:UIControlStateNormal]; [b addTarget:self action:@selector(keyboardButtonClicked) forControlEvents:UIControlEventTouchUpInside]; b.frame = CGRectMake(80,25,160,50); [v addSubview:b]; myTextInput.inputView = v; }
应该工作正常……