0

そのため、デリゲート -didSelectRowAtIndexPath を使用して、UITableView セル内の UIStackView に UIDatePicker を追加しようとしています。行を選択してその行の選択を解除すると、一度だけ機能し、そのアクションを再度繰り返すことはありません。

Stack View は tableview セル内にあり、タグが含まれています。日付ピッカーはシーン ドックにあります。

-didSelectRowAtIndexPath メソッドでは、スタック ビューに日付ピッカーが含まれているかどうかを確認しています。それは一度だけ働いています。

コードは次のとおりです。

 #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
4

2 に答える 2

0

削除中に [_extraPicker setAlpha:0] を追加しました。追加中にビューに必要なアルファを設定したことを確認してください。

于 2015-11-24T11:12:01.783 に答える