Dodaj przycisk do paska nawigacji programowo

89

Witam muszę ustawić przycisk po prawej stronie, na pasku nawigacyjnym, programowo, tak żebym jak wciśnie przycisk wykonał jakieś czynności. Pasek nawigacji utworzyłem programowo przez;

navBar=[[UINavigationBar alloc]initWithFrame:CGRectMake(0,0,320,44) ];

Podobnie muszę dodać przycisk po prawej stronie tego paska nawigacyjnego. Do tego użyłem

1.  

    UIView* container = [[UIView alloc] init];

    // create a button and add it to the container
    UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 130, 44.01)];
    [container addSubview:button];
    [button release];

    // add another button
    button = [[UIButton alloc] initWithFrame:CGRectMake(160, 0, 50, 44.01)];
    [container addSubview:button];
    [button release];

    // now create a Bar button item
    UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithCustomView:container];

    // set the nav bar's right button item
    self.navigationItem.rightBarButtonItem = item;
    [item release];

2.  

    UIImage *im;
    im=[UIImage imageNamed:@"back.png"];
    [button setImage:im forState:UIControlStateNormal];
    [im release];
    backButton = [[UIBarButtonItem alloc] initWithCustomView:button];       
    [backButton setImageInsets:UIEdgeInsetsMake(0, -10,5, 5)];
    [self.navigationItem setRightBarButtonItem:backButton];

3.  

    UIBarButtonItem *refreshItem = [[UIBarButtonItem alloc] initWithTitle:@"button"               style:UIBarButtonItemStylePlain target:self action:@selector(refreshLogsAction:)];
    self.navigationItem.rightBarButtonItem = refreshItem;

    [refreshItem release];

Wypróbowałem wszystkie te sposoby, ale żaden nie wyświetla przycisku po prawej stronie.

prochowiec
źródło

Odpowiedzi:

187

W mojej UIViewControllerklasie pochodnej używam następujących elementów viewDidLoad:

UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] 
                               initWithTitle:@"Flip"                                            
                               style:UIBarButtonItemStyleBordered 
                               target:self 
                               action:@selector(flipView:)];
self.navigationItem.rightBarButtonItem = flipButton;
[flipButton release];

To dodaje przycisk po prawej stronie z tytułem Flip, który wywołuje metodę:

-(IBAction)flipView

To wygląda bardzo podobnie do ciebie # 3, ale działa w moim kodzie.

Xetius
źródło
Musiałem dodać dwukropek do selektora - "akcja: @selector (flipView :)];
Rydell
22
UIImage* image3 = [UIImage imageNamed:@"back_button.png"];
CGRect frameimg = CGRectMake(15,5, 25,25);

UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];
[someButton setBackgroundImage:image3 forState:UIControlStateNormal];
[someButton addTarget:self action:@selector(Back_btn:)
     forControlEvents:UIControlEventTouchUpInside];
[someButton setShowsTouchWhenHighlighted:YES];

UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
self.navigationItem.leftBarButtonItem =mailbutton;
[someButton release];

///// nazwane zdarzeniem

-(IBAction)Back_btn:(id)sender
{
    //Your code here
}

SZYBKI:

var image3 = UIImage(named: "back_button.png")
var frameimg = CGRect(x: 15, y: 5, width: 25, height: 25)

var someButton = UIButton(frame: frameimg)
someButton.setBackgroundImage(image3, for: .normal)
someButton.addTarget(self, action: Selector("Back_btn:"), for: .touchUpInside)
someButton.showsTouchWhenHighlighted = true

var mailbutton = UIBarButtonItem(customView: someButton)
navigationItem?.leftBarButtonItem = mailbutton

func back_btn(_ sender: Any) {
    //Your code here
}
Bhavesh Nayi
źródło
10

Aby dodać przycisk wyszukiwania na pasku nawigacyjnym, użyj tego kodu:

 UIBarButtonItem *searchButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(toggleSearch:)];
self.navigationController.navigationBar.topItem.rightBarButtonItem = searchButton;

i zaimplementuj następującą metodę:

- (IBAction)toggleSearch:(id)sender
{
    // do something or handle Search Button Action.
}
Jabbar
źródło
bardzo dziękuję za twoje rozwiązanie. topItem był tym, czego mi brakowało
Kunal Gupta,
6

Jak szybko dodać przycisk dodawania do paska nawigacyjnego:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "onAdd:")

onAdd:

func onAdd(sender: AnyObject) {
}
raf
źródło
6
self.navigationItem.rightBarButtonItem=[[[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction:)]autorelease];

-(void)saveAction:(UIBarButtonItem *)sender{

//perform your action

}
Gurpreet Singh
źródło
5

Wersja Swift, dodaj to w widokuDidLoad:

var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneButton:")
navigationItem.rightBarButtonItem = doneButton

I to w Twojej klasie View Controller

func doneButton(sender: UIBarButtonItem) {
    println(111)
}
Esqarrouth
źródło
4

Użyj następującego kodu:

UIBarButtonItem *customBtn=[[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStylePlain target:self action:@selector(customBtnPressed)];
[self.navigationItem setRightBarButtonItem:customBtn];
Himanshu Mahajan
źródło
3

Proste użycie natywnego editBarButton w ten sposób

self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.navigationItem.rightBarButtonItem setAction:@selector(editBarBtnPressed)];

i wtedy

- (void)editBarBtnPressed {
    if ([infoTable isEditing]) {
        [self.editButtonItem setTitle:@"Edit"];
        [infoTable setEditing:NO animated:YES];
    }
    else {
        [self.editButtonItem setTitle:@"Done"];
        [infoTable setEditing:YES animated:YES];
    }
}

Baw się dobrze...!!!

Salman Iftikhar
źródło
3

W metodzie ViewDidLoad pliku ViewController.m

UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(back)];

[self.navigationItem setLeftBarButtonItem:cancel];

Selektor „(wstecz)” to metoda usuwania bieżącego kontrolera ViewController

iAnkit
źródło
3

Spróbuj tego, to działa dla mnie. Dodaj przycisk do paska nawigacji programowo, również ustawiamy obraz na przycisk paska nawigacji,

Poniżej znajduje się kod: -

  UIBarButtonItem *Savebtn=[[UIBarButtonItem alloc]initWithImage:
  [[UIImage imageNamed:@"bt_save.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
  style:UIBarButtonItemStylePlain target:self action:@selector(SaveButtonClicked)];
  self.navigationItem.rightBarButtonItem=Savebtn;

  -(void)SaveButtonClicked
  {
    // Add save button code.
  }
Jaywant Khedkar
źródło
1

Jeśli nie szukasz BarButtonItem, ale prostego przycisku na navigationBar, poniższy kod działa:

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setBackgroundImage:[UIImage imageNamed:@"NavBar.png"] forState:UIControlStateNormal];
[aButton addTarget:self
            action:@selector(showButtonView:)
  forControlEvents:UIControlEventTouchUpInside];
aButton.frame = CGRectMake(260.0, 10.0, 30.0, 30.0);
[self.navigationController.navigationBar addSubview:aButton];
iking
źródło
-1

Cześć wszystkim !! Stworzyłem rozwiązanie problemu, w którym potrzebne są dwie orientacje interfejsu UIInterface za pomocą UIIMagePicker .. W moim ViewController, gdzie obsługuję przepływ do UIImagePickerController

** Używam ..

-(void) editButtonPressed:(id)sender {
   BOOL editPressed = YES;
    NSUserDefaults *boolDefaults = [NSUserDefaults standardUserDefaults];
    [boolDefaults setBool:editPressed forKey:@"boolKey"];
    [boolDefaults synchronize];

    [self performSegueWithIdentifier:@"photoSegue" sender:nil]; 

}

**

Następnie w klasie AppDelegate wykonaj następujące czynności.

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {

    BOOL appDelBool;
    NSUserDefaults *boolDefaults = [NSUserDefaults standardUserDefaults];
    appDelBool = [boolDefaults boolForKey:@"boolKey"];

       if (appDelBool == YES)
           return (UIInterfaceOrientationMaskPortrait);
        else
            return UIInterfaceOrientationMaskLandscapeLeft;
}
John Z
źródło
Przepraszam, jakie było pytanie !! : P
Shad