【问题标题】:UIScrollView with many UITableVIew inside UIViewControllers disappear UITableViewCell's on tapUIViewControllers 中带有许多 UITableVIew 的 UIScrollView 在点击时消失 UITableViewCell
【发布时间】:2019-09-26 09:05:33
【问题描述】:

我需要在UIViewController里面做UIScrollView,每个UIViewController都有UITableview。

当我点击 UITableview 时,所有 UITableViewCells 都消失了。

如何在 UIScrollView 中初始化 UIViewController?

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

}

在谷歌和堆栈溢出中查找后,我找到了this solution

所以我做了这样的事情

在我的 .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];

【问题讨论】:

    标签: ios objective-c iphone xcode


    【解决方案1】:

    添加子视图是不够的。

    您必须使用添加整个控制器 addChildViewController:(来自https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchildviewcontroller

    而且你必须保留你添加的每个实例。

    改变

    @property (strong, nonatomic) OneDayDishViewController *myVC;

    进入

    @property (strong, nonatomic) NSMutableArray&lt;OneDayDishViewController*&gt; *myVC;

    【讨论】:

    • @property (strong, nonatomic) Array *myVC;第一次看到这样的定义(可能是我小三)是不是objective-c语法?
    • @BorisKuzevanov 确实
    • 谢谢,在你的帮助下我找到了解决方案` [self addChildViewController:myVC]; [self.scrollView addSubview:myVC.view]; [myVC didMoveToParentViewController:self];` 而不是只有[self.scrollView addSubview:myVC.view];
    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多