action withSender:(id)sender{ return YES; } 实现了上面的两个方法,使用如下的代码可以唤出UIMenuController控件: [self becomeFirstResponder sender{ NSLog(@"share"); } 在实际开发中,开发这完全不需要使用这些私有的方法,UIMenuItem类提供给开发者进行自定义菜单按钮与触发方法,示例如下: [self becomeFirstResponder
primaryAction: UIAction(handler: { [self] _ in self.saveDrawing() })) canvasView.becomeFirstResponder
- (void)awakeFromNib { // 设置光标的颜色 self.tintColor = self.textColor; } // 获取到焦点 - (BOOL)becomeFirstResponder 设置占位文字的颜色 [self setValue:self.textColor forKeyPath:YCplaceholderTextColor]; return [super becomeFirstResponder
addGestureRecognizer:touch]; } return self; } -(void)handleTap:(UIGestureRecognizer*) recognizer { [self becomeFirstResponder
canBecomeFirstResponder{ return YES; } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self becomeFirstResponder
clearColor]; searchBar.placeholder = @"请输入关键字名称"; [searchView addSubview:searchBar]; [searchBar becomeFirstResponder
UILongPressGestureRecognizer *)longRecognizer { if (longRecognizer.state == UIGestureRecognizerStateBegan) { [self becomeFirstResponder
在尝试完其他非直播间的主场景之后,发现问题可以描述为: iOS 11的机器只要弹出来一次UIAlertView,之后再通过becomeFirstResponder无法呼起键盘;必须手动点击输入区域,触发系统的键盘弹出行为 苹果官网上响应链和UIWindow的说明,里面关于becomeFirstResponder()的解释是: Asks UIKit to make this object the first responder
} return _userArray; } - (void)viewDidLoad { [super viewDidLoad]; [self.userNameField becomeFirstResponder self.userNameField.text] ; [self sendMsg:msg]; // [self showLogsWithString:msg]; [self.msgField becomeFirstResponder :(NSIndexPath *)indexPath{ self.toName.text = self.userArray[indexPath.row]; [self.msgField becomeFirstResponder
UIMenuControllerDidHideMenuNotification object:nil]; }else { //如果当前无第一响应者,就成为第一响应者 [self.titleLabel becomeFirstResponder
primaryAction: UIAction(handler: { [self] _ in self.saveDrawing() })) canvasView.becomeFirstResponder
initWithTarget:self action:@selector(longPress)]]; } // 长按事件 - (void)longPress { // 设置label为第一响应者 [self becomeFirstResponder
UNNotificationContentExtensionResponseOption) -> Void) { if response.actionIdentifier == "comment" { becomeFirstResponder () textField.becomeFirstResponder() } } }复制代码 解析一下上述的代码。 首先我们需要让ViewController BecomeFirstResponder。 注意,这里需要2个becomeFirstResponder,第一个becomeFirstResponder是使viewController变成第一响应者,这样textfield就会出现。 第二个becomeFirstResponder是使我们自定义的textfield变成第一响应者,这样键盘才会弹起。
responder) 第一响应者能够优先处理事件,通常是一个UIView的对象,如果一个普通的对象想成为第一响应者,只需要做两件事情: 重写canBecomeFirstResponder方法返回YES 调用becomeFirstResponder 提示:当一个对象变成第一响应者的时候,要确保APP已经建立了object graph(暂且翻译为”对象图“),举例说明,你可以在viewDidAppear: 调用becomeFirstResponder
处理监听方法时移除监听 [[NSNotificationCenter defaultCenter]removeObserver:self.observer]; } 方法四:重写UITextField的 becomeFirstResponder 和 resignFirstResponder 方法 //调用时刻 : 成为第一响应者(开始编辑\弹出键盘\获得焦点) - (BOOL)becomeFirstResponder { return [super becomeFirstResponder]; } //调用时刻 : 不做第一响应者(结束编辑\退出键盘\失去焦点) - (BOOL)resignFirstResponder {
也需要设置becomeFirstResponder:- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[ UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; }
textView.text = @""; textView.textColor = [UIColor blackColor]; //optional } [textView becomeFirstResponder [nextResponder becomeFirstResponder]; } else { // Not found, so remove keyboard.
[_searchBar resignFirstResponder]; [_searchDisplayVC.searchResultsTableView becomeFirstResponder isFirstResponder]) { [_searchVC.searchBar resignFirstResponder]; [_resultTableView becomeFirstResponder
[self.sendTextView isFirstResponder]) 14 { 15 [self.sendTextView becomeFirstResponder]; 16 [self.sendTextView isFirstResponder]) { 22 [self.sendTextView becomeFirstResponder]; 23 [self.sendTextView isFirstResponder]) 23 { 24 [self.sendTextView becomeFirstResponder]; 25
textView.text = cell.ContentLabel.text; [cell.contentView addSubview:textView]; [textView becomeFirstResponder