Ios 我正在尝试在选择行时将对象添加到tableview单元格中的UIStackView并将其删除-它只工作一次
因此,我尝试使用delegate-didselectrowatinexpath将UIDatePicker添加到UITableView单元格内的UIStackView。当我选择行并取消选择该行时,它只工作一次,不会再次重复该操作 堆栈视图位于tableview单元格内,包含一个标记。 日期选取器在场景驳接中 在-didSelectRowAtIndexPath方法中,我正在检查堆栈视图是否包含日期选择器,如果不包含,则添加它,否则删除它。它只工作一次 代码如下:Ios 我正在尝试在选择行时将对象添加到tableview单元格中的UIStackView并将其删除-它只工作一次,ios,objective-c,uitableview,uistackview,Ios,Objective C,Uitableview,Uistackview,因此,我尝试使用delegate-didselectrowatinexpath将UIDatePicker添加到UITableView单元格内的UIStackView。当我选择行并取消选择该行时,它只工作一次,不会再次重复该操作 堆栈视图位于tableview单元格内,包含一个标记。 日期选取器在场景驳接中 在-didSelectRowAtIndexPath方法中,我正在检查堆栈视图是否包含日期选择器,如果不包含,则添加它,否则删除它。它只工作一次 代码如下: #import "MyTableV
#import "MyTableViewController.h"
@interface MyTableViewController ()
@property (strong, nonatomic) IBOutlet UIDatePicker *extraPicker;
@property (nonatomic, strong) UIStackView *stackView; //tag 100
@end
@implementation MyTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedRowHeight = 44;
self.tableView.rowHeight = UITableViewAutomaticDimension;
}
#pragma addPickerViewToStackView
-(void)addPickerViewToStackView{
[_stackView addArrangedSubview:_extraPicker];
}
#pragma mark - remove picker
-(void)removePickerFromStackView{
[UIView animateWithDuration:0.4
animations:^{ [_extraPicker setAlpha:0];
[_extraPicker.widthAnchor constraintEqualToConstant:self.view.frame.size.width].active = true;
[_stackView removeArrangedSubview:_extraPicker];
[self.tableView layoutIfNeeded];
}];
}
#pragma mark - picker date changed
-(IBAction)pickerValeChanged:(id)sender{
[self.tableView reloadData];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return 3;
}else if (section == 1){
return 1;
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"otherCell" forIndexPath:indexPath];
cell.textLabel.text = @"Starts";
if (indexPath.row == 2) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pickerCell" forIndexPath:indexPath];
_stackView = (UIStackView*) [cell viewWithTag:100];
return cell;
}
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self.tableView beginUpdates];
[_extraPicker setAlpha:1];
if (indexPath.row == 1) {
if ([_extraPicker isDescendantOfView:_stackView]) {
[self removePickerFromStackView];
}else if (![_extraPicker isDescendantOfView:_stackView]){
[self addPickerViewToStackView];
}
}
[self.tableView endUpdates];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end
您在删除时添加了[\u extraPicker setAlpha:0],请确保在添加时已将所需的alpha设置为视图。您在删除时添加了[\u extraPicker setAlpha:0],添加时,请确保已将所需的alpha设置为视图。在阅读了苹果网站上的UIStackView文档后,我了解到了以下重要信息: 此方法将提供的视图从堆栈的 arrangedSubviews数组。视图的位置和大小将不再显示 由堆栈视图管理。但是,此方法不会删除 从堆栈的子视图数组中提供视图;因此,这种观点是正确的 仍然显示为视图层次的一部分 在调用堆栈的 removeArrangedSubview:方法,显式地从 通过调用视图的removeFromSuperview方法创建子视图数组,或 将视图的“隐藏”属性设置为“是” 所以我的错误是没有从superView中删除extraPicker。在-removePickerFromStackView中添加此代码后,一切都正常工作 [_extrapickerremovefromsuperview]
在阅读了苹果网站上的UIStackView文档后,我了解了以下重要信息: 此方法将提供的视图从堆栈的 arrangedSubviews数组。视图的位置和大小将不再显示 由堆栈视图管理。但是,此方法不会删除 从堆栈的子视图数组中提供视图;因此,这种观点是正确的 仍然显示为视图层次的一部分 在调用堆栈的 removeArrangedSubview:方法,显式地从 通过调用视图的removeFromSuperview方法创建子视图数组,或 将视图的“隐藏”属性设置为“是” 所以我的错误是没有从superView中删除extraPicker。在-removePickerFromStackView中添加此代码后,一切都正常工作 [_extrapickerremovefromsuperview]
如果alpha是根本原因,那么在添加extraPicker时堆栈视图应该会增长,因为alpha不会更改帧大小。请在addArrangedSubview和removeArrangedSubview方法中显示代码。它们是我在UIStackView实例上调用的UIStackView的默认类方法。嘿,Narayana35,我已经解决了错误并发布了解释。如果阿尔法是根本原因,当extraPicker添加到still Stack View中时,它应该已经增长了,因为alpha不会更改帧大小。请在addArrangedSubview和removeArrangedSubview方法中显示代码。它们是我在UIStackView实例上调用的UIStackView的默认类方法。嘿,Narayana35,我已经解决了错误并发布了解释。