두 섹션이있는 UITableView가 있습니다. 각 섹션의 데이터 소스는 내용을 결정하기 위해 술어를 사용하는 단일 배열입니다. 배열에 다른 객체가 있기 때문에 테이블에 표시하고 싶지는 않지만 사용자가 테이블을 가지고 놀면 (대화식으로) 코어 데이터에 다시 저장할 수 있어야합니다.술어를 사용하는 UITableView의 섹션간에 객체를 움직이게하려면 어떻게해야합니까?
상호 작용 중 하나는 해당 행을 채우는 개체의 속성을 설정하는 셀의 스위치를 두드리는 것입니다. 그 특정 속성에 따라 객체가 표시되는 섹션이 결정됩니다. 지금 당장 어떻게해야합니까?
EDIT : 술어 생성 방법을 보여주는 viewWillLayoutSubviews 코드가 추가되었습니다.
- (void)viewWillLayoutSubviews {
// read and sort initial activities
_activitiesSet = [_theEvent mutableSetValueForKey:@"activities"];
_activitiesArray = [[_activitiesSet allObjects] mutableCopy];
_predIncomplete = [NSPredicate predicateWithFormat:@"(isHidden == NO) AND (isComplete == NO)"];
_predComplete = [NSPredicate predicateWithFormat:@"(isHidden == NO) AND (isComplete == YES)"];
}
- (IBAction)completeSwitchTapped:(id)sender {
UIView *currentSuperview = [sender superview];
while (![currentSuperview isKindOfClass:[UITableViewCell class]] && [currentSuperview superview] != nil) {
currentSuperview = [currentSuperview superview];
}
NSIndexPath *indexPath = [self.itineraryTableView indexPathForCell:(UITableViewCell *)currentSuperview];
switch (indexPath.section) {
case kIncompleteActivitiesSection:
[[[_activitiesArray filteredArrayUsingPredicate:_predIncomplete] objectAtIndex:indexPath.row] setValue:@YES forKey:@"isComplete"];
break;
case kCompleteActivitiesSection:
[[[_activitiesArray filteredArrayUsingPredicate:_predComplete] objectAtIndex:indexPath.row] setValue:@NO forKey:@"isComplete"];
break;
default:
break;
}
[self.itineraryTableView reloadData];
}
잘 작동하지만 애니메이션이 없습니다. 한 행에있는 스위치를 탭하면 해당 섹션에서 사라지고 다른 스위치에 표시됩니다 (reloadData로 인해). 이것은 실제로 매우 우아하지 않습니다.
한 섹션을 떠나는 행과 다른 섹션으로 슬라이드하는 행을 어떻게 애니메이트 할 수 있습니까?
나는 어떻게하면 deleteRowsAtIndexPaths 및 addRowsAtIndexPaths 메서드를 공식화하고 백그라운드에서 필터링 된 단일 배열을 유지해야하는지에 대해 두뇌를 감싸는 것처럼 보일 수 없다.
감사합니다.
그러나 예제에서 "to"indexPath를 얻거나 생성하려면 어떻게합니까? – Kent
'isComplete' 속성의 값을 변경 한 후에 새로운 값에 따라 activities 배열을 필터링하여 목적지 인덱스를 얻습니다. 이 시점에서 당신은 이미 이동 한 부분을 알기 때문에 필요한 부분 만 가져야합니다. – jlehr
흠 ... 나는 이것을 생각해보고 내가 생각해내는 것을 볼 것인데, 나는 그것을 어떻게 다시 걸러 낼 수 있을지 모르겠다. tableview는 isComplete == ON 인 객체가있는 섹션 하나를 반환하고 단일 백킹 배열과 해당 pred를 기반으로하는 다른 섹션을 OFF로 반환합니다. 속성을 설정하고 필터를 적용하면 배열에서 indexPath를 가져 오는 방법을 알지 못합니다. 즉, tablePath가 생성하는 것이지 배열이 아닌 indexPath가 아닌가? 나는 이것의 샘플을 찾을 수 있었으면 좋겠지 만 나는별로 행운이 없다. – Kent