2013-04-17 20 views
16

Tôi đang làm cho một nút thanh tùy chỉnh cho UINavigationBar, Tôi đang sử dụng đoạn mã sauUIBarButtonItem Tuỳ chỉnh xem trong UINavigationBar

UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView]; 
[backButton setTarget:self]; 
[backButton setAction:@selector(BackBtn)]; 
checkIn_NavBar.topItem.leftBarButtonItem = backButton; 

Vấn đề là nó không được gọi hành động của nó. Những gì tôi đang làm sai?

+0

Tôi có thể xem phương pháp BackBtn của bạn không? – Arthur

+0

checkIn_NavBar là gì? Bạn có một tham chiếu mạnh mẽ đến nó? Tại sao không sử dụng self.navigationItem.leftBarButtonItem? –

+0

thử và sử dụng [checkIn_NavBar setLeftBarButtonItem: backButton]; hoặc self.navigationItem.leftBarButtonItem = backButton; – Bonnie

Trả lời

37

Từ tài liệu của Apple:
Khởi một mục mới sử dụng giao diện tùy chỉnh theo quy định.

- (id)initWithCustomView:(UIView *)customView 

thông số customView Một giao diện tùy chỉnh đại diện cho mặt hàng đó. Giá trị trả lại Mục mới được khởi tạo với các thuộc tính được chỉ định.

Thảo luận: Mục nút thanh được tạo bởi phương pháp này không gọi phương thức hành động của mục tiêu của nó để phản hồi tương tác của người dùng. Thay vào đó, mục nút thanh mong đợi chế độ xem tùy chỉnh được chỉ định để xử lý mọi tương tác của người dùng và cung cấp phản hồi thích hợp.

Giải pháp: "Tạo nút với hình nền của bạn (đặt hành động cho nút này) và nút thanh init bằng nút này". Ví dụ:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,25,25) 
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
+4

Câu trả lời hay, nhưng: Docu nói: "Khi tạo nút tùy chỉnh — đó là nút có loại UIButtonTypeCustom — khung ban đầu của nút được đặt thành (0, 0, 0, 0) ban đầu. Trước khi thêm nút vào giao diện của bạn, bạn nên cập nhật khung thành giá trị phù hợp hơn. " Vì vậy, bạn nên dứt khoát đặt khung của nút, nếu không bạn sẽ không thấy gì cả! B v –

+0

@ ReinhardMänner - bạn đã lưu lfe của tôi, người đàn ông! Ngoài ra, đó là một giá trị mặc định khủng khiếp cho một khung hình ... – katzenhut

+0

@katzenhut - vui vì tôi có thể giúp bạn, và bạn hoàn toàn đúng về giá trị mặc định ... –

1
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(graphButton)]; 
self.navigationItem.rightBarButtonItem = graphButton; 

- (void)graphButton{ 
} 
+0

Kết quả trong hai hình ảnh chồng chéo – Hassy

+0

? Chồng chéo? Bạn có nghĩa là trong navigationBar bên phải có nút đã? – brianLikeApple

+0

Xóa mã của bạn và sao chép mã của tôi và thay thế tên hình ảnh nút. Thay đổi chức năng chọn bất cứ điều gì bạn thích. Nó sẽ hoạt động! – brianLikeApple

1

tôi thực hiện sử dụng mã sau đây:

UIButton *nxtBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal]; 
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside]; 
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)]; 
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn]; 

checkIn_NavBar.topItem.rightBarButtonItem=nextButton; 
+1

Vì vậy, bạn thêm nút vào nút. Điều đó không có vẻ gì cả. – Popeye