2010-11-04 19 views

Trả lời

118

Cho phép scrollView là phiên bản UIScrollView.

Trong mục tiêu-C, nó khá dễ dàng. Chỉ cần gọi makeObjectsPerformSelector:, như vậy:

Objective-C:

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

Trong Swift, bạn không nhận được rằng việc truy cập thời gian chạy, vì vậy bạn phải thực sự xử lý lặp chính mình.

Swift:

Một phiên bản ngắn gọn, from here:

scrollview.subviews.map { $0.removeFromSuperview() } 

Một cách mô tả nhiều hơn để làm điều này (từ here) giả định scrollview.subviews:

let subviews = self.scrollView.subviews 
for subview in subviews{ 
    subview.removeFromSuperview() 
} 
+3

này sẽ loại bỏ các chỉ báo cuộn nếu chúng được thiết lập để hiển thị, nhưng OP không quan tâm đến chúng như được ghi trong các bình luận bên dưới. – Jessedc

+0

+1, Awesome .. tuyệt vời chỉ là một dòng duy nhất :) – mAc

+2

Đây có phải là chủ đề chính không? – Plot

32

Tôi nghĩ rằng bạn chỉ phải cẩn thận và không xóa các thanh chỉ báo cuộn.

Mã do Adam Ko đưa ra ngắn và thanh lịch nhưng có thể xóa các chỉ báo cuộn ngang và dọc.

Tôi thường làm

for (UIView *v in scrollView.subviews) { 
    if (![v isKindOfClass:[UIImageView class]]) { 
    [v removeFromSuperview]; 
    } 
} 

Suposing bạn không có UIImageView của thêm vào cuộn bằng tay.

+0

Tôi vẫn chưa sử dụng các chỉ báo. Điểm tốt mặc dù.+1 – Moshe

+0

Đối với những gì tôi đã thử nghiệm, mã của tôi đã không loại bỏ các chỉ số cuộn, tôi tin rằng đó là bởi vì UIScrollView tải các chỉ số lazily bất cứ khi nào nó cần được hiển thị, nhưng đó là một điểm tốt để được ghi nhận mặc dù. – koo

+4

Thực ra tôi nghĩ đây không phải là giải pháp tốt vì nếu bạn có các bản xem trước UIImageView mà bạn muốn xóa? – Tony

1

Nếu bạn muốn loại bỏ uiimageviews trong scrollview.subviews và bạn cũng muốn giữ các chỉ báo dọc và ngang. Bạn có thể đặt một "thẻ" đặc biệt để xác định chế độ xem và loại trừ các chỉ báo dọc và ngang có thẻ là 0 theo mặc định.

2

Ngoài Ricardo de Cillo, trong trường hợp của tôi, tôi đã có một cái nhìn bảng có số lần truy cập tưởng tượng trong các cuộc phỏng vấn mà tôi muốn xóa.

for (UIView *v in self.tableview.subviews) { 
    if ([v isKindOfClass:[UIImageView class]]) { 
    [v removeFromSuperview]; 
    } 
} 

Loại bỏ! trong lệnh if và thay đổi scrollview thành self.tableview đã xóa tất cả các hình ảnh, nhưng để lại chế độ xem bảng bị ảnh hưởng.

0

Bổ sung phiên bản ngắn gọn Swift từ một câu trả lời trước (Swift 3.0 sẵn sàng):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }