2013-06-04 30 views
17

Chỉ cần tò mò, tại sao thiết lập self.navigationItem = ... hoạt động, nhưng self.navigationController.navigationItem không thành công? Điều tương tự cũng áp dụng cho self.toolbarItems so với self.navigationController.toobarItems.navigationController.navigationItem vs navigationItem

Khi nào sử dụng self.navigationController.navigationItem?

Có thể bạn sẽ nói, chúng trỏ đến những thứ khác nhau. nhưng tại sao self.navigationController.navigationBarHidden = YES thanh điều hướng bị ẩn. không có nghĩa là self.navigationController.navigationItem chỉ vào thanh tôi muốn?

Trả lời

23

Lớp UIViewController có thuộc tính navigationItem.

Điều này cũng đúng với tất cả các lớp con quá dù đó là UICollectionViewController, UITableViewController, UINavigationViewController hoặc bất kỳ lớp con tùy chỉnh nào.

Khi được trình bày bởi UINavigationController trình điều khiển điều hướng sẽ tạo thuộc tính này và vì vậy mỗi bộ điều khiển chế độ xem sẽ có một số navigationItem riêng. Nếu bạn không trình bày nó từ một bộ điều khiển điều hướng thì navigationItem là không.

Bây giờ, với UINavigationController, bạn có nhiều khả năng sử dụng điều này làm bộ điều khiển chế độ xem ban đầu của mình. Do đó, bộ điều khiển dẫn hướng KHÔNG được trình điều khiển điều hướng khác trình bày và thuộc tính navigationItem của nó là không.

Thanh điều hướng hơi khác khi điều này được quản lý theo cách khác.

+0

không "bộ điều khiển điều hướng sẽ tạo thuộc tính này và vì vậy mỗi bộ điều khiển chế độ xem có điều hướng riêng của nóIt" có nghĩa là thuộc tính 'navigationItem' chỉ có thể được đặt bởi cha mẹ? nếu điều này là đúng, tại sao 'self.navigationController.navigationItem' kết quả thành' 'không nil? – limboy

+0

sau khi thử nghiệm, nó chỉ ra 'self.navigationItem' sẽ không được nil, gây ra sau khi init, trước khi thêm vào navController' self.navigationItem' được thiết lập. – limboy

+0

Ah xin lỗi, sai lầm của tôi. Đúng là mặc dù mục điều hướng được sở hữu bởi bộ điều khiển hiển thị hiện tại không phải bởi bộ điều khiển điều hướng. – Fogmeister

0

mặc dù bộ có thể đặt thuộc tính này của bộ điều khiển điều hướng: self.navigationController.navigationItem = .. nhưng không hoạt động. Chủ yếu là do navigationItem là thuộc tính của UIViewController. Bạn có thể truy cập thuộc tính vì UINavigationController được kế thừa từ UIViewController. thuộc tính này có nghĩa là cho bất kỳ bộ điều khiển xem nào được thêm vào bộ điều khiển điều hướng để có thanh điều hướng được tạo cho chúng. Thông thường một UINavigationController sẽ không được đưa vào một bộ điều khiển điều hướng khác, do đó, thiết lập thuộc tính này của bộ điều khiển điều hướng thường không có ý nghĩa.