2011-12-19 25 views
7

Tôi có 30 nút trong một chế độ xem trong Trình tạo giao diện. Mỗi thẻ có một thẻ khác nhau giữa 100001 và 100030. Tôi đã tìm thấy nó dễ dàng để sử dụng cùng một hành động cho mỗi nút, đi dọc theo thẻ cho mỗi khi nhấn và sử dụng mã để quyết định mức tải.Tôi có thể kết nối nhiều đối tượng với các thẻ khác nhau vào cùng một IBOutlet không?

Tôi muốn kết nối tất cả các nút với một IBOutlet đơn lẻ, nhưng mỗi nút tải một hình ảnh khác nhau dựa trên dữ liệu đã lưu của người dùng và thẻ của nút.

Làm cách nào để thực hiện việc này?

Trả lời

23

Sử dụng IBOutletCollection để thêm một bộ sưu tập ổ cắm để điều khiển xem của bạn, như thế này:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons; 

này sẽ cho phép bạn kết nối tất cả các nút của bạn đến một lối thoát. Các tài sản buttons sẽ là một NSMutableSet chứa tất cả các nút của bạn. Bạn có thể tiếp tục xác định các nút riêng lẻ bằng cách sử dụng thuộc tính của tag của nút. Đây là thuận tiện nếu bạn muốn lặp qua tất cả các nút của bạn, có lẽ để thiết lập hình ảnh của mỗi nút:

for (UIButton *b in self.buttons) { 
    b.imageView.image = [self imageForTag:b.tag]; 
} 

(Bạn sẽ cần phải cung cấp các phương pháp -imageForTag: để cung cấp các hình ảnh phù hợp với một thẻ nào đó, hoặc tìm một số cách khác để ánh xạ từ thẻ sang hình ảnh.)

Tất nhiên, nếu bạn đã biết phạm vi giá trị thẻ cho tất cả các nút của mình và nếu bạn đã chú ý tạo các thẻ duy nhất trong chế độ xem có chứa tất cả các nút, bạn cũng có thể chỉ cần tìm nạp từng nút riêng lẻ bằng cách sử dụng -viewWithTag:. Điều này có thể không nhanh bằng việc có toàn bộ các nút đã được tạo, như bạn có với bộ sưu tập đầu ra được mô tả ở trên, nhưng điều đó có nghĩa là có một điều ít hơn để duy trì.

+1

Vâng, tại chỗ trên! Ive chỉ cố gắng này, và NSLog'ed đếm của mảng, và kết nối của nó nút hoàn hảo ... Chỉ có điều này tôi không biết làm thế nào để làm là sau đó sử dụng này để thay đổi hình ảnh nút này? Tôi phải làm gì mã khôn ngoan? Cảm ơn! –

+0

Đặt hình ảnh của nút không khác gì khi sử dụng IBOutletCollection hơn là sử dụng IBOutlet cũ đơn giản, ngoại trừ việc trước tiên bạn phải lấy từng nút từ bộ sưu tập. Tôi đã thêm một đoạn mã nhỏ ở trên có thể hữu ích. – Caleb

+1

Cảm ơn thats làm việc tốt ngay bây giờ! : D –

0

Thực hiện theo các bước sau để tạo ra một loạt các cửa hàng một kết nối nó với IB Elements:

  • Tạo một mảng của IBOutlets
  • Thêm nhiều UIElements (Views) trong giao diện Storyboard ViewController bạn
  • Chọn ViewController (Trong bảng phân cảnh) và thanh tra kết nối mở
  • Có tùy chọn 'Bộ sưu tập đầu ra' trong thanh tra kết nối (Bạn sẽ thấy một loạt các cửa hàng ở đó)
  • Kết nối nếu với các yếu tố giao diện của bạn

-

class ViewController2: UIViewController { 


    @IBOutlet var collection:[UIView]! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

enter image description here

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