user172902
user172902

Reputation: 3601

Create navigation item with default Icon programatically IOS

I want to create a navigation item "Refresh" with the default XCode refresh Icon programmatically. I know how to create one with the word "Refresh" with the following code. However, I want to have the icon insetead of the word "Refresh" Thanks for helping in advance

    let refreshButton = UIBarButtonItem(title: "Refresh", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(FollowVC.refresh))

refresh

Upvotes: 2

Views: 7405

Answers (2)

user3182143
user3182143

Reputation: 9609

Superb question.I tried sample one for your question.I got the solution and It works fine.

what you made mistake in your coding is

First your

let refreshButton = UIBarButtonItem(title: "Refresh", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(FollowVC.refresh)) 

is wrong.You have to use or write

UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem, target: AnyObject?, action:Selector)

Second you used UIBarButtonItemStyle.Plain.If you want refresh button you have to set UIBarButtonSystemItem.Refresh.

SWIFT

override func viewDidLoad()
{
    // Create the navigation bar
    let navigationBar = UINavigationBar(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: self.view.frame.size.width, height: 64))) // set frame here

    //set the background color
    navigationBar.backgroundColor = UIColor.white
    navigationBar.delegate = self as? UINavigationBarDelegate;

    // Create a navigation item with a title
    let navigationItem = UINavigationItem()
    navigationItem.title = "title" //If you want to set a tilte set here.Whatever you want set here.

    // Create  button for navigation item with refresh
    let refreshButton =  UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.refresh, target: self, action: Selector(("actionRefresh:")))


    // I set refreshButton for the navigation item
    navigationItem.leftBarButtonItem = refreshButton


    // Assign the navigation item to the navigation bar
    navigationBar.items = [navigationItem]

    // Make the navigation bar a subview of the current view controller
    self.view.addSubview(navigationBar)

}

#pragma action method

func actionRefresh(sender: UIBarButtonItem) 
{
  print("The action button is refreshed")
}

Print statement is

The action button is refreshed

OBJECTIVE C

- (void)viewDidLoad 
{
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
   UINavigationBar *navbar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

   navbar.backgroundColor = [UIColor whiteColor];   

   navbar.delegate = self;
   UINavigationItem * navItem = [[UINavigationItem alloc] init];

   navItem.title = @"Title";  //Set Title Here Wahtever You Want Here
   UIBarButtonItem *buttonRefresh = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                           target:self
                           action:@selector(actionRefresh:)];

   navItem.leftBarButtonItem = buttonRefresh;
   navbar.items = @[navItem];
   [self.view addSubview:navbar];
 }

The NSLog statement is

The button action refresh is performed

See the refresh button in screenshot

enter image description here

Good Solutions

Add Default Icons to Navigation Bar

Navigation Bar Item Programmatically

Adding Navigation Bar item Programmatically

Upvotes: 7

Zac Kwan
Zac Kwan

Reputation: 5757

Instead of using .Plain, you should be using .Refresh.

let refreshButton = UIBarButtonItem(barButtonSystemItem: .Refresh, target: self, action: #selector(FollowVC.refresh))

Also you should be using the init(barButtonSystemItem:target:action:) instead of the init(title:style:target:action:).

Upvotes: 2

Related Questions