我现在正在创建一个具有 Safari 之类的浏览器的应用程序:
在视图顶部的 UINavigationBar 中插入了一个 UITextField(左侧)和 UISearchBar(右侧)。
我想知道是否有一种方法可以在用户触摸 UITextField 时出现的“取消”按钮上添加动画。
动画就像在 Safari 上一样:当用户触摸 UITextField 时,“取消”按钮来自窗口的右侧,而 UISearchBar 正在消失。
请注意,我正在通过 UIBarbuttonItem(UIBarButtonSystemItemCancel) 初始化“取消”按钮。
任何帮助,将不胜感激。
更新:最后我自己找到了答案。似乎您无法指定 UIBarButtonItem 显示或隐藏的特定位置。所以解决这个问题的一种可能方法是自定义一个 UIButton,看起来就像 UIBarButtonItem,下面是代码:
-(void)viewDidLoad {
......
CGSize backgroundStretchPoints = {4, 2};
UIImage *image = [[UIImage imageNamed:@"UINavigationBarDefaultButton.png"] stretchableImageWithLeftCapWidth:backgroundStretchPoints.width
topCapHeight:backgroundStretchPoints.height];
button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(330, 23, 80, 30); // initialize the button outside the window
[button setBackgroundImage:image forState:UIControlStateNormal];
[button setTitle:@"Cancel" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12];
[button addTarget:self action:@selector(cancelButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[navigationBar addSubview: button];
.......
}
当您单击 UITextField(ie) 时,取消按钮将滑入窗口:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView animateWithDuration:0.25 animations:^{
button.frame = CGRectMake(232, 23, 80, 30); // here is the position button will slide into window with animation
}];
}