2011-12-18 42 views
9

Tôi có hai chế độ xem, chế độ xemA và chế độ xemB. Tôi tải viewB ở trên cùng của viewA vớiChế độ xem xóa iOS

[self.view addSubview: viewB.view]; 

Tôi không thể xóa chế độ xemB, nhưng tôi không làm cách nào để thực hiện. Tôi đã thử

[self.view removeFromSuperview]; 

nhưng điều này không hoạt động. Tôi có thể làm cái này như thế nào?

Trả lời

19

Gọi -removeFromSuperview trên viewB.view.

+0

thử nó, treo ứng dụng với điều này: '- [viewB performSelector: withObject: withObject:]: thông điệp gửi đến dụ deallocated 0xf568d40' – McDermott

+0

bạn có thể gửi nhiều mã của bạn thật khó để? biết g là gì oing sai mà không bối cảnh nhiều hơn. – Sean

+0

Tôi phát hiện ra rằng sự cố không liên quan đến điều đó. Nó hoạt động hoàn hảo ngay bây giờ. – McDermott

7

Để xóa chế độ xem của viewB khỏi trình giám sát của nó, bạn cần phải gọi removeFromSuperview trên chế độ xem đó.

[viewB.view removeFromSuperview]; 

Từ UIView class reference.

removeFromSuperview 

hủy liên kết người nhận từ SuperView và cửa sổ của nó, và loại bỏ nó từ chuỗi trả lời.

3

Bạn đang đi đúng hướng bằng cách sử dụng removeFromSuperView. Nhưng bạn cần phải gửi thư đến chế độ xem mà bạn muốn xóa. Giống như Till ví dụ

[viewB.view removeFromSuperview]; 

Tuy nhiên, bạn có thể không có tay cầm để xemB nếu bạn không muốn sử dụng thuộc tính và phương pháp tổng hợp. Tôi sẽ sử dụng @property và @synthesize. Vì vậy, bạn có thể sử dụng:

[self.viewB.view removeFromSuperview]; 

Một cách khác là sử dụng này: (giả định rằng viewB.view của bạn là quan điểm cuối cùng bạn đã thêm vào viewA.view

[[self.view.subviews objectAtIndex:(self.view.subviews.count - 1)]removeFromSuperview]; 

Bạn có thể có được một danh sách tất cả subviews của viewA của bạn bằng cách:

NSLog(@"subviews of viewA.view: %@",self.view.subviews); 
+1

FYI bạn có thể gọi 'lastObject' để lấy đối tượng cuối cùng của một mảng (thay vì' self.view.subviews.count - 1) ' – Rog

+0

Tôi đã học được khi tôi đi. Thông tin tuyệt vời! – user523234

+0

Tôi đang thêm rất nhiều thứ theo chương trình, vì vậy 'removeFromSuperview' là lựa chọn của tôi. – McDermott

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