จะเพิ่มปุ่มลงใน UINavigationBar โดยทางโปรแกรมได้อย่างไร?
จะเพิ่มปุ่มลงใน UINavigationBar โดยทางโปรแกรมได้อย่างไร?
คำตอบ:
ตัวอย่างรหัสเพื่อตั้งค่าrightbutton
บนไฟล์NavigationBar
.
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];
แต่โดยปกติคุณจะมี a NavigationController
ช่วยให้คุณสามารถเขียน:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
[rightbutton release]
ภายใต้ ARC (ซึ่งไม่ได้อยู่ในขณะที่เขียนความคิดเห็นนี้)
คำตอบข้างต้นเป็นสิ่งที่ดี แต่ฉันต้องการอธิบายเคล็ดลับเพิ่มเติม:
หากคุณต้องการแก้ไขชื่อของปุ่มย้อนกลับ (ลูกศร -y มองที่ด้านซ้ายของแถบนำทาง) คุณต้องทำในตัวควบคุมมุมมองก่อนหน้าไม่ใช่ตัวควบคุมที่จะแสดง ก็เหมือนกับการพูดว่า "เฮ้ถ้าคุณเคยดันตัวควบคุมมุมมองอื่นไว้ด้านบนของตัวควบคุมนี้ให้เรียกปุ่มย้อนกลับ" ย้อนกลับ "(หรืออะไรก็ได้) แทนค่าเริ่มต้น"
หากคุณต้องการซ่อนปุ่มย้อนกลับระหว่างสถานะพิเศษเช่นในขณะที่แสดง UIPickerView ให้ใช้self.navigationItem.hidesBackButton = YES;
และอย่าลืมตั้งค่ากลับเมื่อคุณออกจากสถานะพิเศษ
หากคุณต้องการแสดงปุ่มสัญลักษณ์พิเศษปุ่มใดปุ่มหนึ่งให้ใช้แบบฟอร์มที่initWithBarButtonSystemItem:target:action
มีค่าเช่นUIBarButtonSystemItemAdd
จำไว้ว่าความหมายของสัญลักษณ์นั้นขึ้นอยู่กับคุณ แต่โปรดระวังแนวทางการเชื่อมต่อกับมนุษย์ การใช้ UIBarButtonSystemItemAdd เพื่อหมายถึงการลบรายการอาจทำให้แอปพลิเคชันของคุณถูกปฏิเสธ
การเพิ่มปุ่มที่กำหนดเองลงในแถบนำทาง (พร้อมรูปภาพสำหรับ buttonItem และการระบุวิธีการดำเนินการ (โมฆะ) openView {} และ)
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 32, 32);
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init];
[barButton setCustomView:button];
self.navigationItem.rightBarButtonItem=barButton;
[button release];
[barButton release];
ตัวอย่างด้านล่างจะแสดงปุ่มที่มีชื่อ "ผู้ติดต่อ" บนแถบนำทางทางด้านขวา การดำเนินการเรียกเมธอดชื่อ "contact" จาก viewcontroller หากไม่มีบรรทัดนี้จะมองไม่เห็นปุ่มขวา
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
ใน Swift 2 คุณจะต้องทำ:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(ไม่ใช่การเปลี่ยนแปลงที่สำคัญ) ใน Swift 4/5 จะเป็น:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
ทำไมไม่ใช้สิ่งต่อไปนี้: (จากปุ่มวาดย้อนกลับแบบกำหนดเองบนแถบนำทางของ iPhone )
// Add left
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"];
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"];
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES];
// set the delegate to self
[self.navigationController.navigationBar setDelegate:self];
รวดเร็ว 3
let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:)))
cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(),
NSForegroundColorAttributeName : UIColor.white], for: .normal)
self.navigationItem.leftBarButtonItem = cancelBarButton
func cancelPressed(_ sender: UIBarButtonItem ) {
self.dismiss(animated: true, completion: nil)
}