像键盘一样在标签栏上设置动画选择器视图

时间:2011-05-02 18:21:07

标签: iphone objective-c

我使用选择器子视图为自定义视图设置动画,例如激活UITextField时键盘的显示方式。

目前我通过将自定义视图作为子视图添加到应用的UIWindow来实现。如果我将自定义视图作为子视图添加到当前标签栏视图控制器的视图中,则标签栏将覆盖选取器。有没有办法将自定义视图设置为当前视图控制器的子视图,而没有标签栏覆盖自定义视图?键盘出现了什么视图?

2 个答案:

答案 0 :(得分:7)

只是一个小小的免责声明:这是我在stackoverflow上的第一篇文章,所以如果格式化不是很好,我很抱歉。另外,我对iOS编程以及Objective C语言都很陌生,所以我绝对不会说这是应该做的事情。然而,最近我遇到了一个类似的情况,我以一种我认为非常优雅的方式解决了这个问题:

对我来说,使用UIPickerView似乎只是将文本输入文本字段而不是使用常规键盘的首选方式。从用户体验的角度来看,对我而言,这意味着UIPickerView应该以与键盘类似的方式显示。

从iOS 3.2开始,UITextField支持inputView属性来分配用作键盘的自定义视图,这提供了一种显示UIPickerView的方法:

UIPickerView *myPickerView = [[UIPickerView alloc] init];
//myPickerView configuration here...
myTextField.inputView = myPickerView;
像那样。由于你的UIPickerView没有返回按钮,这不会给你直接的方法来解雇视图,这就是为什么我建议使用inputAccessoryView属性来显示带有完成按钮的工具栏(该栏只是为了美观,你可能也是只需使用UIButton对象):

UIToolbar *myToolbar = [[UIToolBar alloc] initWithFrame:
 CGRectMake(0,0, 320, 44); //better code with variables to support view rotation
UIBarButtonItem *doneButton =
 [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
 target:self action:@selector(inputAccessoryViewDidFinish)];
 //using default text field delegate method here, here you could call
 //myTextField.resignFirstResponder to dismiss the views
[toolbar setItems:[NSArray arrayWithObject: doneButton] animated:NO];
myTextField.inputAccessoryView = myToolbar;
//you can -release your doneButton and myToolbar if you like

当我重读你的问题时,我注意到UIPickerView只是子视图的一部分。无论如何,这种方法适用于任何视图,因此在您的情况下,您可以将子视图设置为UITextField的inputView。

答案 1 :(得分:0)

您可以尝试将子视图添加到UITabBarController的视图本身,而不是活动控制器的视图(tabBarController.view而不是tabBarController.selectedViewController.view),并在您添加的子视图上执行bringSubviewToFront。我没试过这个,所以我不确定它是否有效。

它确实感觉有点黑客,因为它依赖于UITabBarController合作 - 这让我感到不舒服,因为这种行为没有明确定义。我没有看到使用UIWindow的任何内在错误。