Iphone удалить суб вид - PullRequest
34 голосов
/ 22 марта 2012

У меня есть UINavigationController. В правом верхнем углу у меня есть кнопка, по нажатию которой я должен получить раскрывающийся список. Я создал другой класс UIViewController с xib и добавил его в качестве subView к текущему представлению. Он должен появиться при первом нажатии и исчезнуть при втором щелчке. Это должно происходить для всех кликов (открыть вид и закрыть вид). Я написал этот код, но не знаю, где я иду не так. кто-то, пожалуйста, помогите

-(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];

    }
  }

}

Что мне здесь не хватает?

РЕДАКТИРОВАТЬ: TableViewController - это имя моего класса UIViewController

Ответы [ 4 ]

65 голосов
/ 22 марта 2012

Ключ здесь

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

каждое подпредставление имеет класс UIView и ваш тест

isKindOfClass:[TableViewController class]

тестирует класс TableViewController

Я бы предложил способ сделать это, пометив представления, которые вы добавляете динамически, скажем, 99 - и затем в вашем цикле вы можете идентифицировать эти представления по их тегу.

например.

for (UIView *subView in self.view.subviews)
{
    if (subView.tag == 99) 
    {
        [subView removeFromSuperview];
    }
}
12 голосов
/ 19 июня 2015

Swift версия

Чтобы удалить отдельное подпредставление:

subView.removeFromSuperview()

Чтобы удалить все подпредставления:

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

Источник: Как лучше всегоудалить все виды из родительского / суперпредставления?

4 голосов
/ 22 марта 2012

Попробуйте это,

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

     [subView removeFromSuperview];
}
3 голосов
/ 22 марта 2012

Вот кое-что, что должно как-то работать - предполагая, что tableView1 - это сохраненный @property (Если нет, то, возможно, этот ТАК ответ о методах отложенной загрузки для вас).

-(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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...