未解决问题!!:
目标:在键盘上方加一个toolbar,可以随着键盘一起上移和消失
我查找了几种方法 试了
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
和再添加一个 UIKeyboardWillHideNotification 两个通知方法,并在回调函数里添加我自己的toolbar 但是真机测试的时候,键盘和toolbar并没有一起显示
而是键盘先显示 然后点别的地方再点这个textfiled的时候 toolbar才和键盘一起显示,难道是加载顺序的问题么。。
代码如下 不知道错误在哪里
- (void)keyboardWillShow:(NSNotification *)notification
{
NSLog(@"%s", __func__) ;
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.barTintColor = [UIColor colorWithRed:255.0/255.0 green:240.0/255.0 blue:245.0/255.0 alpha:100];
CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
toolbar.bounds = CGRectMake(0, 0, screenW, 44);
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc ] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(leaveEditMode)];
//固定长度的按钮
UIBarButtonItem *fixedBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
fixedBtn.width = 10;
//可拉伸的按钮
UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
toolbar.items = @[fixedBtn,flexible,doneBtn];
self.productTip.inputAccessoryView = toolbar;
}
//键盘弹起后处理scrollView的高度使得textfield可见
-(void)keyboardDidShow:(NSNotification *)notification
{
NSLog(@"%s", __func__) ;
if (keyboardIsShown) {
return;
}
NSDictionary * info = [notification userInfo];
NSValue *avalue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [self.view convertRect:[avalue CGRectValue] fromView:nil];
CGRect viewFrame = [myscrollview frame];
viewFrame.size.height -= keyboardRect.size.height;
myscrollview.frame = viewFrame;
CGRect textFieldRect = [currentTextfield frame];
[myscrollview scrollRectToVisible:textFieldRect animated:YES];
keyboardIsShown = YES;
}
然后我试着把添加toolbar的方法添加在viewWillLoad方法中 问题就解决了 。。但是为什么上面那个方法不行呢!!
另外一个问题就是一个scrollView里有几个文本框 当进入这个viewcontroller的时候 焦点初次在文本框中 ,scrollview是无法滚动的,当把
// 设置UIScrollView的contentSize
//myscrollview.frame = CGRectMake(0, 0, 320, 400);
self.ScrollView.contentSize = CGSizeMake(320, 400);
这段代码从viewdidload中写到viewwillappear中 问题就解决了。。估计还是加载的问题!~