gpt4 book ai didi

ios - 在 UIPickerVIew viewForRow : loses its subviews? 中重用 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:57 26 4
gpt4 key购买 nike

我正在尝试在 UIPickerView 中重新使用带有 subview 的 View :

- (UIView *)pickerView:(UIPickerView *)pickerView 
viewForRow:(NSInteger)row
forComponent:(NSInteger)component
reusingView:(UIView *)view
{
UILabel* label = nil;
if (view == nil) {
view = [[UIView alloc] init];
label = [[UILabel alloc] init];
[view addSubview:label];
}
if (label == nil) {
label = view.subviews[0]; // Exception here because there are no subviews
}
...

如果我的“reusingView”UIView 在入口时被设置,我希望它保留(字面上和比喻上!)我添加的 subview ,UILabel。然而,在从头开始设置前几个屏幕 View 后,我被调用了一个(回收,我假设)非零“reusingView”,但它没有任何 subview ,所以我崩溃了当试图获取其现有标签以更改它时。

我是不是误会了什么?

最佳答案

我无法重现您的问题。我用下面的代码做了一个简单的项目,和你的很相似。我在标签上添加了一个框架,并对背景进行了着色,这样我就可以看到发生了什么。您能看出与现有内容有什么不同会导致结果不同吗(也许问题出在您没有显示的“...”区域)?

- (void)viewDidLoad {
[super viewDidLoad];
self.picker.dataSource = self;
self.picker.delegate = self;
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 10;
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel* label = nil;
if (view == nil) {
view = [[UIView alloc] init];
view.backgroundColor = [UIColor blueColor];
label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 60, 22)];
label.text = @"test";
[view addSubview:label];
}
if (label == nil) {
NSLog(@"%@",view.subviews);
label = view.subviews[0]; // I do get subviews here.
}
return view;
}

关于ios - 在 UIPickerVIew viewForRow : loses its subviews? 中重用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com