UIScrollView со многими UITableVIew внутри UIViewControllers исчезают UITableViewCell при нажатии - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужно сделать UIScrollView изнутри UIViewController, каждый UIViewController имеет UITableview.

Когда я нажимаю на UITableview, все UITableViewCell исчезают.

Как я инициализирую UIViewController внутри UIScrollView?

- (void)viewDidLoad {
[super viewDidLoad];

int width = 0;
for (int i = 0; i < [self.dishes count]; i++) {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Order" bundle:nil];
    OneDayDishViewController *myVC = (OneDayDishViewController *)[storyboard instantiateViewControllerWithIdentifier:@"OneDayDishViewController"];
    myVC.dishes = self.dishes[i];
    myVC.menuTitle = self.menuTitle;

    [self.scrollView addSubview:myVC.view];
    width += 375;
}

self.scrollView.contentSize = CGSizeMake(width,0);

}

После поиска в Google и переполнения стека я нашел это решение

Итак, я сделал что-то подобное

вмой файл .h (где у меня есть UIScrollView):

@property (strong, nonatomic) OneDayDishViewController *myVC;

чем в моем файле .m:

- (void)viewDidLoad {
[super viewDidLoad];

int width = 0;

for (int i = 0; i < [self.dishes count]; i++) {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Order" bundle:nil];
    self.myVC = [storyboard instantiateViewControllerWithIdentifier:@"OneDayDishViewController"];
    self.myVC.dishes = self.dishes[i];
    self.myVC.menuTitle = self.menuTitle;

    [self.scrollView addSubview:self.myVC.view];
    width += 375;
}

self.scrollView.contentSize = CGSizeMake(width,0);

} ​​

Теперь у меня также есть N элементов вмой прокрутка, если я коснусь последнего элемента - он работает нормально, если я коснусь любого другого элемента - проблема та же.

Итак, что я делаю неправильно или как я могу создать (сильный) правильно динамически иэто хорошая практика?

Спасибо

UPDT: Спасибо @ CZ54, мое решение - добавить childviewcontroller, поэтому сделайте

         [self addChildViewController:myVC];
    [self.scrollView addSubview:myVC.view];
    [myVC didMoveToParentViewController:self];

вместо

[self.scrollView addSubview:myVC.view];

1 Ответ

1 голос
/ 26 сентября 2019

Добавление подпредставления недостаточно.

Вы должны добавить весь контроллер, используя addChildViewController: (из https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchildviewcontroller)

И вы должны сохранить каждый экземпляр, который выдобавляются.

Изменить

@property (strong, nonatomic) OneDayDishViewController *myVC;

на

@property (strong, nonatomic) NSMutableArray<OneDayDishViewController*> *myVC;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...