2


我现在正在创建一个具有 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
    }];

}

4

0 回答 0