【问题标题】:UISegment Control in UITableView Prototype cell, when value is changed in Segment control the scroll is moved to topUITableView原型单元格中的UISegment控件,当Segment控件中的值更改时,滚动将移动到顶部
【发布时间】:2021-02-17 17:22:51
【问题描述】:

我有一个屏幕,我们在其中显示“是”或“否”的问题。对于是或否,我们使用了 UISegment 控件。 当 UISegment 控件中的值发生变化时,滚动将移动到屏幕顶部,当我们有更多问题时以及当我们选择最后一个或但最后一个时,如图所示。

以下是用于呈现控件的代码。

链接到视频输出的外观https://imgur.com/nvn1Exw

请帮助我如何消除在段控制中选择新值时的滚动移动。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return timeOutQuestions.count;
}

- (UITableViewCell* )tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
    static NSString* questionTableIdentifier=@"SegmentCell";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: questionTableIdentifier];
    
    if(cell == nil){
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:questionTableIdentifier];
         cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
         cell.textLabel.numberOfLines = 0;
      }
    
    cell.separatorInset = UIEdgeInsetsMake(0.0 , cell.bounds.size.width , 0.0, -cell.bounds.size.width);
       
    Question* currentQuestion=[[shared getQuestions:questionSet] objectAtIndex:indexPath.row];
    @try{
        UISegmentedControl *segment = [[cell.contentView subviews] objectAtIndex:0];
        segment.selectedSegmentIndex = [[questionSegmentControl objectAtIndex:indexPath.row] integerValue];
        [segment addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];
        
        UILabel *label = [[cell.contentView subviews] objectAtIndex:1];
        label.text = currentQuestion.questionText;
        label.numberOfLines = 0;
        label.lineBreakMode = NSLineBreakByWordWrapping;
        
        [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    }@catch(NSException* ex){
        NSLog(@"%@",ex.reason);
    }
    
    if(changeOffSet && indexChangedValue.row > 2){
        [self.questionTableView setContentOffset:tableContentOffSet animated:NO];
         [UIView setAnimationsEnabled:true];
        changeOffSet = false;
    }
    
    return cell;
}

- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
    NSInteger selectedSegment = sender.selectedSegmentIndex;
    CGPoint senderOriginInTableView = [questionTableView convertPoint:CGPointZero fromView:sender];
    NSIndexPath *indexPath = [questionTableView indexPathForRowAtPoint:senderOriginInTableView];
    indexChangedValue = indexPath;
    tableContentOffSet = self.questionTableView.contentOffset;
    [UIView setAnimationsEnabled:false];
    changeOffSet = true;
}

https://imgur.com/nvn1Exw

【问题讨论】:

    标签: ios objective-c xcode uitableview


    【解决方案1】:

    我认为您正在使用此程序以编程方式进行滚动

    [self.questionTableView setContentOffset:tableContentOffSet animated:NO];
    

    我认为您需要对其进行一些修改。停止更改内容偏移量,看看效果如何。另外,也许你需要摆脱这条线

    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    

    我认为这也会干扰滚动。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2012-01-05
      • 1970-01-01
      • 2015-07-18
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多