#ios #objective-c #xcode #uitableview
#iOS #objective-c #xcode #uitableview
Вопрос:
У меня есть экран, на котором мы показываем вопросы с ДА или НЕТ. Для да или нет мы использовали элемент управления 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 amp;amp; 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;
}
Ответ №1:
Я думаю, что вы выполняете прокрутку программно с помощью этого
[self.questionTableView setContentOffset:tableContentOffSet animated:NO];
Я думаю, вам нужно его немного переработать. Прекратите изменять смещение содержимого и посмотрите, как это происходит. Кроме того, возможно, вам нужно избавиться от этой строки
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
что, я думаю, также мешает прокрутке.