2012-03-22 34 views
30

Tôi có một UINavigationController. Trên đầu trang bên phải tôi có một nút bấm vào đó tôi phải có được một cái nhìn xuống bảng. Tôi tạo ra một lớp UIViewController, với xib và thêm nó như là một subView để xem hiện tại. Nó sẽ xuất hiện trên lần nhấp đầu tiên và biến mất vào lần nhấp thứ hai. Điều này sẽ xảy ra cho tất cả nhấp chuột (chế độ xem mở và chế độ xem gần). Tôi đã viết mã này nhưng không biết nơi tôi đang đi sai. ai đó vui lòng giúp đỡIphone xóa chế độ xem phụ

-(void)modalTableView 
{ 
tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 

for (UIView *subView in self.view.subviews) 
{ 

    if ([subView isKindOfClass:[TableViewController class]]) 
    { 

     [subView removeFromSuperview]; 
    } 

    else 
    { 
     [self.view addSubview:tableView1.view]; 

    } 
    } 

} 

Tôi đang thiếu gì ở đây?

EDIT: TableViewController là tên của tôi UIViewController Lớp

Trả lời

62

Các đầu mối là ở đây

for (UIView *subView in self.view.subviews) 

mỗi subview là của lớp UIView và thử nghiệm của bạn

isKindOfClass:[TableViewController class] 

là thử nghiệm cho lớp TableViewController

Tôi sẽ đề xuất một cách để làm điều này sẽ bằng cách gắn thẻ các chế độ xem mà bạn thêm động, với 99 - và sau đó trong vòng lặp của bạn, bạn có thể xác định các lượt xem đó theo thẻ của chúng.

ví dụ:

for (UIView *subView in self.view.subviews) 
{ 
    if (subView.tag == 99) 
    { 
     [subView removeFromSuperview]; 
    } 
} 
4

Hãy thử điều này,

if ([subView isKindOfClass:[UITableView class]]) 
{ 

    [subView removeFromSuperview]; 
} 
+0

tôi có một cái nhìn bảng trong quan điểm của tôi cũng có. Vì vậy, những gì này đang làm là loại bỏ các tableview trong quan điểm của tôi và không phải là bộ điều khiển xem tôi đã thêm như asubview –

+0

Là nếu điều kiện của bạn làm việc đúng cách. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/isKindOfClass: – chinthakad

3

Đây là cái gì đó nên đi một số cách để làm việc - giả định rằng tableView1 là một @property giữ lại (Nếu không thì có lẽ this SO trả lời về kỹ thuật tải lười biếng là dành cho bạn).

-(void)modalTableView 
{ 
    if (tableView1 != nil) 
    { 
     tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 
    } 

    if (tableView1.view.superview == nil) 
    { 
     [self.view addSubview:tableView1.view]; 
    } else 
    { 
     [tableView1.view removeFormSuperview]; 
    } 
} 
+0

chỉ cần truy cập vòng lặp thứ hai nếu nó thêm một subview. n có tableview1 được giữ lại trong các thuộc tính của nó. –

+0

Vì vậy, nếu nó có một giám sát đã được bạn phải có thêm nó vào một cái gì đó trước đó .... tiếp tục kiểm tra bạn phải ở gần đó. Bạn có muốn đăng mã đã sửa đổi của mình ngay bây giờ không? – Damo

5

phiên bản Swift

câu trả lời này là dành cho những người không quen thuộc với Objective-C. Nó là tổng quát hơn một chút so với câu hỏi.

Để loại bỏ một subview duy nhất:

subView.removeFromSuperview() 

Để loại bỏ tất cả các subviews:

for subView in self.subviews as [UIView] { 
    subView.removeFromSuperview() 
} 

Nguồn: What is the best way to remove all views from parent view/super view?

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