2014-09-28 16 views
6

Trong ứng dụng của tôi, tôi thêm nhãn vào chế độ xem và sau đó tôi đang cố xóa các nhãn cụ thể khỏi chế độ xem khi nút được nhấp và đang gặp lỗi khi cố gắng truy xuất các bản xem trước:Swift - Truy xuất các bản xem trước

class FirstViewController: UIViewController { 

    @IBAction func btnAddTask_Click(sender: UIButton){ 

      var subViews = self.subviews.copy() 

    } 
} 

tôi nhận được lỗi:

'FirstViewController' không có một thành viên có tên là 'subviews'

Làm thế nào tôi có thể nhận được subviews của giao diện hiện tại?

+1

'tự. view.subviews'? –

+0

Tôi đã thử cách này và gặp lỗi này: '[AnyObject]' không có thành viên có tên 'copy' – user2961953

+0

Mảng luôn sao chép trong Swift. –

Trả lời

11

UIViewController không có thuộc tính subviews. Nó có một tài sản view, trong đó có một tài sản subviews:

for subview in self.view.subviews { 
    // Manipulate the view 
} 

Nhưng thường đây không phải là một ý tưởng tốt. Thay vào đó, bạn nên đặt các nhãn bạn muốn vào một số IBOutletCollection và lặp lại điều đó. Nếu không, bạn đã gắn liền với tập hợp chính xác các bản xem trước (có thể thay đổi).

Để tạo IBOutletCollection, hãy chọn tất cả các nhãn bạn muốn trong IB và điều khiển để kéo chúng vào mã nguồn. Nó sẽ hỏi nếu bạn muốn tạo một mảng sưu tập. (Lưu ý rằng không có lời hứa về trình tự của mảng này.)

+0

cảm ơn. Điều này không hoạt động. Tôi sẽ xem xét đề xuất của bạn để sử dụng IBOutletCollection – user2961953

+0

Tôi đang tạo động các nhãn, vì vậy tôi sẽ cần tìm ra cách thêm nhãn vào bộ sưu tập từ mã nguồn. Cảm ơn bạn lần nữa – user2961953

+0

Chỉ cần đặt chúng vào một thuộc tính mảng khi bạn tạo chúng. –

4

Đối với tất cả subviews khỏi tầm nhìn của bạn, bạn có thể sử dụng mã này:

for subview in self.view.subviews { 
    // Use your subview as you want 
} 

Nhưng để sử dụng nó, bạn phải xác định xem những gì bạn nhu cầu. Bạn có thể đánh dấu bất kỳ yếu tố, những gì bạn tạo ra, với định danh đặc biệt như thế này:

myButton.restorationIdentifier = "mySpecialButton"; 

Và sau đó bạn có thể tìm thấy nguyên tố của bạn sử dụng cấu trúc này:

for view in view.subviews { 
       if (view.restorationIdentifier == "mySpecialButton") { 
        print("I FIND IT"); 
        view.removeFromSuperview(); 
       } 
      } 

:)

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