2015-09-26 23 views
5

Tôi đang viết một ứng dụng loại danh sách công việc phải làm, để tìm hiểu nhanh về phát triển iOS. Tôi đã có nút cài đặt trên thanh Điều hướng, ở bên phải và bất cứ khi nào một người nhấp vào nút ở phía trên cùng của chế độ xem bảng, họ có thể thêm một mục mới vào danh sách của họ. Điều đó làm cho nút "hủy" xuất hiện ở phía bên trái của thanh và nút "thêm" xuất hiện ở bên phải. Khi người đó được thực hiện, tuy nhiên, các nút đó biến mất, và vì vậy tôi lập trình tái tạo nút cài đặt, với một cuộc gọi đến một chức năng được cho là sẽ gọi segue.Bộ chọn không hoạt động trên UIBarButtonItem nhanh chóng

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("showSettings:")) 

Đây là mã tạo các nút trên thanh điều hướng (và nó thực sự được tạo ra)

func showSettings(sender: AnyObject?) { 
    print("segueShouldBeDone!") 
    performSegueWithIdentifier("showSettings", sender: sender) 
} 

Và đây là chức năng đó là nghĩa vụ để gọi segue (tôi thêm bản in để xem nếu ít nhất nó được gọi, và nó không phải là).

Tôi đã gặp vấn đề tương tự ở một nơi khác trong mã của mình, nhưng tôi đã từ bỏ việc sửa chữa nó vì điều đó không quan trọng đối với tôi sau đó. Nhưng bây giờ nó can thiệp vào cách ứng dụng hoạt động, vì vậy tôi muốn biết cách sửa nó.

Mọi trợ giúp đều tuyệt vời.

+0

@LeoDabus Mặc dù bạn đã đúng và tôi nên làm điều đó, nó thực sự đã không thay đổi bất cứ điều gì, loại bảo vệ tôi. Hình ảnh đã được hiển thị rồi. – AugustoQ

Trả lời

10

Bộ chọn showSettings: của bạn không được gọi vì bạn đã chỉ định nil thay vì self cho mục tiêu của mục nút thanh. Thay đổi dòng thành:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showSettings:")) 

Giả định phương pháp showSettings: này nằm trong cùng một lớp có chứa dòng mã này.

Đọc tài liệu về trình khởi tạo này, cụ thể là thông tin về thông số target.

+0

Đúng, điều đó đã giải quyết được. Nhưng ngay cả khi chức năng 'showSettings' của tôi không lấy bất kỳ tham số nào (và tôi đã sử dụng" showSettings "như một bộ chọn), nó không hoạt động. Người gửi segue có khác với 'nil' không? Một nơi khác mà tôi đã sử dụng nó (như đã đề cập trong câu hỏi), nó không lấy bất kỳ thông số nào, và chức năng cũng không được gọi. Điều đó làm tôi bối rối vì tôi đã sử dụng nó để tạo ra các nút "Add" và "Cancel" với 'target: nil', và chúng hoạt động tốt. – AugustoQ

+0

Việc chuyển 'self' thay vì' nil' thành bộ khởi tạo 'UIBarButtonItem' hoàn toàn không có gì liên quan đến tham số' sender' được truyền cho phương thức 'showSettings:' của bạn và không có gì để làm với segue. – rmaddy

+0

Tại sao các UIBarButtonItems khác của tôi hoạt động khi chúng đã nhắm mục tiêu 'nil', và hai số còn lại không có? Bất kỳ ý tưởng? – AugustoQ

Các vấn đề liên quan