UIViewControllers 中带有许多 UITableVIew 的 UIScrollView 在点击时消失 UITableViewCell

Posted

技术标签:

【中文标题】UIViewControllers 中带有许多 UITableVIew 的 UIScrollView 在点击时消失 UITableViewCell【英文标题】:UIScrollView with many UITableVIew inside UIViewControllers disappear UITableViewCell's on tap 【发布时间】: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];

【问题讨论】:

【参考方案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];

以上是关于UIViewControllers 中带有许多 UITableVIew 的 UIScrollView 在点击时消失 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 数据框中转换具有许多工作表(在 shett 名称中带有空格)的 excel 文件

Flutter 中带有 ListView 的 FAN 横幅

在 Ipad 中带有完成按钮的 UIPickerView

IOS中带有静态数组数据的自动完成文本字段

如何将 Json 请求中带有 unicode 的值转换为简单字符?

在 Windows 上处理文件名中带有回车的文件