Keyboard is not open on button click

时间:2015-06-26 09:37:53

标签: ios keyboard uitextfield

I want to show keyboard when tap on button, but the case is that keyboard has accessory view and that is textfield. In short, I want to open keyboard with accessory view which is textfield. Which is right way to do it..?

I searched a lot, but none of those solutions helped me to achieve this. Please help me.

Here is my code : 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];
}

2 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助..我点击按钮点击键盘上的配件视图:

  #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];

    }

答案 1 :(得分:0)

你的

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];