smi*_*Bot 4 cocoa-touch objective-c ios
我在获取文本字段以接受becomeFirstResponder指令时遇到问题.
我正在提供一个自定义机制来在导航栏中创建标题.我有另一个成功使用相同技术的viewcontroller.在viewDidAppear上我开火了:
- (void)addTitleTextField
{
CGRect textFrame = self.parentViewController.navigationController.navigationBar.frame;
textFrame.size.width = 300.0;
textFrame.origin.y = (768.0 - 300.0)/2;
textFrame.size.height = 30.0;
textFrame.origin.x = 7.0;
self.titleTextField = [[UITextField alloc] initWithFrame:textFrame];
self.titleTextField.placeholder = NSLocalizedString(@"New Multiple Choice Quiz", @"New Multiple Choice Quiz");
self.titleTextField.borderStyle = UITextBorderStyleRoundedRect;
self.titleTextField.font = [UIFont boldSystemFontOfSize:20.0];
self.titleTextField.textAlignment = NSTextAlignmentCenter;
self.titleTextField.backgroundColor = [UIColor whiteColor];
self.titleTextField.textColor = [UIColor blackColor];
self.titleTextField.delegate = self;
[self.titleTextField setAutocorrectionType:UITextAutocorrectionTypeNo];
self.titleTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
[self.titleTextField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
self.activeTextField = self.titleTextField;
self.parentViewController.navigationItem.titleView = self.titleTextField;
[self.titleTextField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
self.titleTextField将允许我设置文本值,但如果使用canBecomeFirstResponder进行检查,则返回NO.如您所见,我在parentViewController上设置它.我已经尝试使用委托来尝试让parentViewController进行设置.当我执行委托并检查textField是否可以成为第一个响应者时它返回YES,但我仍然无法让它接受firstResponder顺序.有任何想法吗?Docs说"如果当前响应者可以辞退第一响应者状态(canResignFirstResponder)并且新响应者可以成为第一响应者",则响应者对象仅成为第一响应者.
你是否告诉UITextField成为后台线程的选择器?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil
waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)
基本原理:在主线程以外的方法上调用UIKit方法(即更新视图)将不起作用..这可能会发生.(目前尚不清楚从哪里调用addTitleTextField方法).
还有另一个第一响应者需要一些时间辞职吗?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
Run Code Online (Sandbox Code Playgroud)
理由:如果另一个字段挂在第一个响应者身上(或者在辞职过程中),它会给它时间来清理一个辞职,等到下一个运行循环.....通常下一个运行循环将有足够的时间让前一个响应者清理,或者你可以尝试像0.05这样的短暂延迟.
| 归档时间: |
|
| 查看次数: |
8945 次 |
| 最近记录: |