Hãy thử điều này:
UIView *v = [self.containerView viewWithTag:[n integerValue]];
v.hidden = YES;
[self.containerView bringSubviewToFront:v];
[v removeFromSuperview];
Một điều tôi chỉ nhận thấy từ các tài liệu lớp UIView - xem câu cuối cùng:
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.
- (void) removeFromSuperview
Thảo luận Nếu SuperView của người nhận không phải là con số không, phương pháp này giải phóng người nhận. Nếu bạn dự định sử dụng lại chế độ xem, hãy nhớ giữ lại chế độ xem trước khi gọi phương thức này và đảm bảo phát hành nó khi thích hợp khi bạn hoàn thành nó hoặc sau khi thêm nó vào một hệ thống phân cấp khung nhìn khác.
Không bao giờ gọi phương thức này khi hiển thị.
CẬP NHẬT: Bây giờ là năm 2014 và xóa một chế độ xem phụ mà không ẩn nó hoạt động hoàn toàn tốt. Mã của người đăng ban đầu phải hoạt động như sau:
UIView *v = [self.containerView viewWithTag:[n integerValue]];
[v removeFromSuperview];
Điều này sẽ xóa v và mọi chế độ xem mà nó đã đính kèm dưới dạng xem phụ, bỏ lại phía sau container và bất kỳ anh chị em nào của v.
** đáng ngại ** Không bao giờ gọi phương thức này khi hiển thị. – Irwin
không thể dễ dàng hơn, chỉ cần làm điều này như Blackberry nói ** cho (UIView * s trong [xem subviews]) [s removeFromSuperview]; ** – Fattie
Quay lại trong '09, nếu bạn loại bỏ một subview trước khi ẩn nó, bạn có một số kết quả lạ. Hoặc ít nhất đó là những gì tôi đã nhìn thấy, và như vậy là poster ban đầu. Và có được sử dụng để được cảnh báo trong tài liệu tham khảo lớp UIView, đã được thay thế bằng một số khác. Tôi muốn nói rằng phương pháp của poster ban đầu loại bỏ một subview có lẽ bây giờ là chính xác và không cần bất kỳ mã bổ sung. (anh ấy chỉ xóa một tiểu đơn lẻ) – mahboudz