【问题标题】:Keyboard is not open on button click单击按钮时键盘未打开
【发布时间】:2015-09-13 04:58:52
【问题描述】:

我想在点击按钮时显示键盘,但情况是键盘具有附件视图,即文本字段。简而言之,我想用文本字段的附件视图打开键盘。哪种方法是正确的..?

我进行了很多搜索,但这些解决方案都没有帮助我实现这一目标。 请帮帮我。

这是我的代码: ViewController.m

@interface ViewController () <UITextFieldDelegate>
{
    UITextField *txtNote;
}

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *accView = [self createAccessoryView];
    [txtNote setInputAccessoryView:accView];
}

- (UIView *)createAccessoryView
{
    UIView *accessoryView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 45)];
    [accessoryView setBackgroundColor:[UIColor lightGrayColor]];
    [accessoryView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin];

    CGFloat x = self.view.frame.size.width-65;

    txtNote = [[UITextField alloc] initWithFrame:CGRectMake(0, 5, x-5, 35)];
    txtNote.delegate = self;
    txtNote.font = [UIFont systemFontOfSize:IS_IPAD?20.0:14.0];
    [accessoryView addSubview:txtNote];

    UIButton *btnSave = [UIButton buttonWithType:UIButtonTypeCustom];
    btnSave.frame = CGRectMake(x, 5, 60, 35);
    btnSave.layer.cornerRadius = 5.0f;
    btnSave.clipsToBounds = TRUE;
    btnSave.titleLabel.font = [UIFont systemFontOfSize:18.0f];
    [btnSave setTitle:@"Save" forState:UIControlStateNormal];
    [btnSave setBackgroundColor:[UIColor blackColor]];
    [btnSave setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [btnSave addTarget:self action:@selector(doneWithNumberPad:) forControlEvents:UIControlEventTouchUpInside];
    [btnSave setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin];
    [accessoryView addSubview:btnSave];

    return accessoryView;
}

- (IBAction)addNote:(UIButton *)button
{
    // On this click, I want to show keyboard.
    [txtNote becomeFirstResponder];
}

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

【问题讨论】:

    标签: ios keyboard uitextfield


    【解决方案1】:

    希望这对您有所帮助..我在单击按钮时获得了带有键盘的附件视图:

      #import "ViewController.h"
    
       @interface ViewController ()<UITextFieldDelegate>{
          UITextField *txtNote;
          UIView *accessoryView ;
        }
      @end
    
     @implementation ViewController
    
     - (void)viewDidLoad
     {
       [super viewDidLoad];
       // call create accessoryview
       [self createAccessoryView];
     }
    
     - (UIView *)createAccessoryView
       {
         accessoryView = [[UIView alloc]initWithFrame:CGRectMake(0, 100, 200, 45)]; 
        [accessoryView setBackgroundColor:[UIColor lightGrayColor]];
        accessoryView.userInteractionEnabled = YES;
    
        //assign your dynamic frame values 
       txtNote = [[UITextField alloc] initWithFrame:CGRectMake(20, 5, 100, 35)];
      txtNote.delegate = self;
      txtNote.backgroundColor = [UIColor greenColor];
      txtNote.userInteractionEnabled =YES;
      txtNote.keyboardAppearance = UIKeyboardAppearanceDefault;
      txtNote.font = [UIFont systemFontOfSize:IS_IPAD?20.0:14.0];
      [accessoryView addSubview:txtNote];
    
      UIButton *btnSave = [UIButton buttonWithType:UIButtonTypeCustom];
      btnSave.frame = CGRectMake(200, 5, 60, 35);
      btnSave.layer.cornerRadius = 5.0f;
    
      // btnSave.clipsToBounds = TRUE;
    
      btnSave.titleLabel.font = [UIFont systemFontOfSize:18.0f];
      [btnSave setTitle:@"Save" forState:UIControlStateNormal];
      [btnSave setBackgroundColor:[UIColor blackColor]];
      [btnSave setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    
      [btnSave addTarget:self action:@selector(doneWithNumberPad:) forControlEvents:UIControlEventTouchUpInside];
      [btnSave setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin];
      [accessoryView addSubview:btnSave];
    
      return accessoryView;
     }
    
      - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
       {
           NSLog(@"begin");
           return YES;
       }
    
    //Call the accessory view with keyboard with button action
      -(IBAction)addBu:(id)sender{
         [txtNote becomeFirstResponder];
         [self.view addSubview:accessoryView];
    
        }
    

    【讨论】:

    • 附件视图未附加到键盘
    • 我要设置键盘附件视图
    【解决方案2】:

    你的

    CGFloat x = self.view.frame.size.width-65;
    
    txtNote = [[UITextField alloc] initWithFrame:CGRectMake(0, 5, x-5, 35)];
    txtNote.delegate = self;
    txtNote.font = [UIFont systemFontOfSize:IS_IPAD?20.0:14.0];
    [accessoryView addSubview:txtNote];
    

    应该是

    CGFloat x = self.view.frame.size.width-65;
    
    txtNote = [[UITextField alloc] initWithFrame:CGRectMake(0, 5, x-5, 35)];
    txtNote.delegate = self;
    txtNote.font = [UIFont systemFontOfSize:IS_IPAD?20.0:14.0];
    [self.view addSubview:txtNote];
    

    【讨论】:

    • 你是对的。但我也想要附件视图中的 textField。
    • textField 的框架可以位于附件视图中,但不能是附件视图的子视图。这是一个保留周期
    猜你喜欢
    • 2020-06-19
    • 2021-10-21
    • 1970-01-01
    • 2017-10-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多