2014-09-27 91 views
1

此问题与ios8的新自定义键盘无关,而与我为ios7应用程序创建的现有键盘无关。IOS 8更改键盘高度

当从选项列表中给用户一个选择时,可以使用UIPickerView作为键盘。但是在某些情况下,我只有两种选择,在这种情况下我不喜欢选择器视图。所以我创建了我自己的UITableView键盘。此键盘的大小取决于tableview中的行数(最大高度)。我在ViewWilAppear中设置键盘的高度。这在ios7中运行得非常好,但在ios8中并没有考虑到新的高度。我不明白什么是错的。任何人都可以帮助我在ios8中再次使用它。

键盘在ios7(抱歉的大图片,我不知道如何缩放): enter image description here

键盘在iOS8上: enter image description here

我的键盘代码:

根据要求
@interface LBTableKeyBoardVC() <UITableViewDelegate, UITableViewDataSource> 

// List view in table form 
@property (weak, nonatomic) IBOutlet UITableView *tableView; 

// Last selected item in list 
@property (strong, nonatomic) NSIndexPath *lastSelected; 

// flag for using selecting mark when selecting a item 
@property (nonatomic) BOOL selectionMark; 

@end 



@implementation LBTableKeyBoardVC 

#define MAX_HEIGHT_KEYBOARD  245 


#pragma mark - View initialization 

- (id)initWithData:(NSArray *)data { 
    // set data 
    self.listData = data; 

    // init view controller 
    self = [self initWithNibName:@"LBTableKeyBoardVC" bundle:nil]; 

    return self; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     [self setup]; 
    } 
    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self setup]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.tableView reloadData]; 

// [self setNewHeight:[NSNumber numberWithInteger:(self.listData.count * self.tableView.rowHeight)]]; 
    [self performSelector:@selector(setNewHeight:) withObject:[NSNumber numberWithInteger:(self.listData.count * self.tableView.rowHeight)] afterDelay:0]; 
} 

- (void)setup { 
    // initialize table view 
    self.tableView.delegate = self; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"ListItem"]; 

    // resize keyboard if necessary 
    // This is the code that will make sure the view does not get resized to the default keyboard frame size 
    self.view.autoresizingMask = UIViewAutoresizingNone; 
    self.tableView.rowHeight = 44; 

    self.selectionMark = YES; 
} 

- (void)dealloc { 
    self.tableView.delegate = nil; 
    self.delegate = nil; 
    self.listData = nil; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

- (void)setNewHeight:(NSNumber *)height { 
    NSInteger currentHeight = self.view.frame.size.height; 
    NSInteger heightInt = [height integerValue]; 

    if (heightInt != currentHeight) { 
     if (heightInt > MAX_HEIGHT_KEYBOARD) { 
      heightInt = MAX_HEIGHT_KEYBOARD; 
     } 

     self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, heightInt); 
    } 
} 


#pragma mark UITableViewDataSource 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.listData count]; 
} 

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"ListItem"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = [self textForRowAtIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor colorWithHexString:@"C7CBD3"]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (self.selectionMark) { 
     // deselect old 
     UITableViewCell *old = [self.tableView cellForRowAtIndexPath:self.lastSelected]; 
     old.accessoryType = UITableViewCellAccessoryNone; 
     [old setSelected:NO animated:YES]; 

     // select new 
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     cell.selectionStyle = UITableViewCellSelectionStyleDefault; 
     [cell setSelected:YES animated:YES]; 

     // keep track of last selected 
     self.lastSelected = indexPath; 
    } 

    [self.delegate keyboard:self.view selectedItem:[self textForRowAtIndexPath:indexPath]]; 
} 


#pragma mark - List data 

- (NSString *)textForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return [self.listData objectAtIndex:indexPath.row]; 
} 

@end 

编辑:

创建键盘如下:

- (LBTableKeyBoardVC *)genderKeyBoard { 
    if (!_genderKeyBoard) { 
     _genderKeyBoard = [self tableKeyBoardWithData:@[NSLocalizedString(@"Male", "Gender keyboard option for male"), NSLocalizedString(@"Female", "Gender keyboard option for female")]]; 
    } 

    return _genderKeyBoard; 
} 

我使用键盘的UITextField在自定义UITableViewCell

textFieldCell.textField.inputView = self.genderKeyBoard.view; 
+0

你能分享显示键盘的代码吗? – Rikkles 2014-09-27 10:38:08

回答

1

我找到了工作了,但同时老办法不灵,我不明白。所以如果有人知道为什么...我仍然有兴趣了解更多信息。

解决方案:

- (void)setup { 
    // initialize table view 
    self.tableView.delegate = self; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"ListItem"]; 

    // resize keyboard if necessary 
    // This is the code that will make sure the view does not get resized to the default keyboard frame size 
    self.view.autoresizingMask = UIViewAutoresizingNone; 
    self.tableView.rowHeight = KEYBOARD_ROWHEIGHT; 

    // set height of keyboard view according the number of rows in the table 
    [self setNewHeight:[NSNumber numberWithInteger:(self.listData.count * self.tableView.rowHeight)]]; 

    self.selectionMark = YES; 
} 

setup设置新的高度。在这里我已经知道表格的数据,并且我可以计算键盘视图的高度。我在viewWillAppear:中删除了拨打setNewHeight:的电话。现在键盘按预期显示。我不得不改变另一件事与ios7相比。我不得不以编程方式设置表格的行高度。在xib文件中,行高已经定义为44,但是当我用NSLog打印行高时,它给出了-1?