iOS - Customizing Cancel button of UISearchBar

后端 未结 4 2263
我在风中等你
我在风中等你 2020-12-14 22:16

In my iOS5 iPhone application, i\'m setting the tint color of search bar using following code:

searchBar.tintColor = UIColorMake(@\"#EFEFEF\");
相关标签:
4条回答
  • 2020-12-14 22:57

    This method works in IOS7

    for (UIView *view in searchBar.subviews)
        {
            for (id subview in view.subviews)
            {
                if ( [subview isKindOfClass:[UIButton class]] )
                {
                    // customize cancel button
                    UIButton* cancelBtn = (UIButton*)subview;
                    [cancelBtn setEnabled:YES];
                    break;
                }
            }
        }
    

    Check this https://stackoverflow.com/a/18150826/1767686

    0 讨论(0)
  • 2020-12-14 22:59

    You can customize the Cancel button on iOS 5 by using the appearance proxy. You need to change appearance of UIBarButtonItem when contained in UISearchBar. For example to change the title font of the Cancel button you can use:

    NSDictionary *attributes =
        [NSDictionary dictionaryWithObjectsAndKeys:
         [UIColor whiteColor], UITextAttributeTextColor,
         [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5], UITextAttributeTextShadowColor,
         [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
         [UIFont systemFontOfSize:12], UITextAttributeFont,
         nil];
    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
        setTitleTextAttributes:attributes forState:UIControlStateNormal];
    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
        setTitleTextAttributes:attributes forState:UIControlStateHighlighted];
    
    0 讨论(0)
  • 2020-12-14 23:15

    Since iOS5 you can edit the Navigationbar, Toolbar, Tabbar and some more with this code...

    NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                                              [UIColor darkGrayColor], 
                                              UITextAttributeTextColor, 
                                              [UIColor whiteColor], 
                                              UITextAttributeTextShadowColor, nil];
    [[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
    

    I haven´t tested it with a searchbar, but it should work similar.

    0 讨论(0)
  • 2020-12-14 23:21

    You could search for UISearchBar subViews and locate the cancel button, it is dangerous to do so, since the button could change For example you could add this in your viewWillAppear

    - (void) viewWillAppear:(BOOL)animated
    {
        //show the cancel button in your search bar
        searchBar.showsCancelButton = YES;
        //Iterate the searchbar sub views
        for (UIView *subView in searchBar.subviews) {
            //Find the button
            if([subView isKindOfClass:[UIButton class]])
            {
                //Change its properties
                UIButton *cancelButton = (UIButton *)[sb.subviews lastObject];
                cancelButton.titleLabel.text = @"Changed";
            }
        }
    }
    

    As i said before this could change, its a hack to do so, you better stick with the original, or create your own search bar.

    0 讨论(0)
提交回复
热议问题