2014-02-12 3 views
0

iOS 개발에 대해 배우려고하고 있으며 To-Do 목록 작성을위한 Apple의 자습서를 따르고 있습니다. 튜토리얼 후에, 그들은 계속해서 앱을 만들고, 더 많은 기능을 구현할 것을 추천했다.클릭하면 UITableViewCell에서 더 많은 텍스트가 펼쳐지고 표시됩니다.

사용자가 셀을 클릭하면 확장되고 추가 콘텐츠가 표시됩니다. 예를 들어 탭 때

Buy groceries <- "item1" 
Do homework  <- "item2" 
Go for a jog <- "item3" 

이로 바뀝니다 :

Buy groceries <- "item1" 
    Buy apples <- "subitem1" 
    Buy bread <- "subitem2" 
    Buy milk <- "subitem3" 

Do homework  <- "item2" 
Go for a jog <- "item3" 

을 마우스 오른쪽 단추로 지금은 XYZToDoSubItem 클래스와 XYZToDoItem 클래스가 있습니다. XYZToDoItem은 이름, 완료 상태 및 생성 날짜를 XYZToDoSubItem에서 상속합니다. 또한 SubItem을 포함하는 Mutable Array를 가지고 있습니다.

제가 다른 일련의 기능 구현 :

  1. 사용자가 "유지"

    셀이 편집 모드로 전환을
  2. 사용자 더블 탭 셀, 그것은 YES로 완료 상태를 설정할 때와 체크 표시 추가

따라서 단일 탭으로 이러한 기능을 방해 할 수 없습니다.

가 나는 또한 하나의 탭에 대해 "청취자"가 (viewDidLoad 기능을 완료 할) :

dtp 더블 탭 인식기입니다
-(void) viewDidLoad { 
    UITapGestureRecognizer *stp = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
    stp.numberOfTapsRequired = 1; 
    stp.numberOfTouchesRequired = 1; 
    [stp requireGestureRecognizerToFail:dtp]; 
    [self.tableView addGestureRecognizer:stp]; 
} 

.

handleSingleTap 기능은 다음과 같습니다 : 기본적으로 작동 방법입니다

- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p]; 

    if(indexPath != nil) { 
     //Add contents to cell and update height here 
} 

}

를 그 사용자가 셀을 탭 (다시 오기로 진행하지 마십시오 (더 더블 탭 없다)), handleSingleTap이 실행됩니다. 여기서 우리는 셀의 indexPath을 두드려 보았습니다. 그게 nil (셀이 배경이 아니라 도청되었음을 의미합니다)이라면 셀에 내용을 추가하고 높이를 업데이트하고 싶습니다.

어떻게해야합니까?

그냥 [self.tableView realoadData] 또는 [self.tableView beginUpdates][self.tableView endUpdates]를 호출 한 후 여러 subtitle의 같은 내용을 추가 할 수 있으며, 아이폰 OS는 자체의 크기를 조정 처리? 그렇다면 데이터를 어떻게 추가합니까? 그리고 어떻게 resize 메서드를 호출할까요? 그렇지 않다면 데이터를 삽입 한 후 수동으로 셀의 크기를 조정하는 방법은 무엇입니까?

내 설정은 다음과 같습니다

In the ViewController class: 
@property NSMutableArray *toDoItems; 

In the ToDoItem class (inherits from subitem): 
@property NSMutableArray *toDoSubItems; 

In the SubItem class: 
@property NSString *itemName; 
@property BOOL completed; 
@property (readonly) NSDate *creationDate; 

나는 누군가가이 문제를 해결하는 방법을 알아낼 수 있기를 바랍니다.

미리 감사드립니다. 알렉산더.

답변

0

개인적으로는 실제로는 [tableView beginUpdates]; [tableView endUpdates];을 사용하는 것이 좋습니다. 정말 멋진 애니메이션을 제공합니다. :-)

그 코드의 문제는 실제로 세포 자체를 업데이트하지 않는다는 것입니다, 그것은 cellForRowAtIndexPath를 호출하지 않습니다. 이전에 언급 한 코드를 사용하여 높이 변경을 애니메이션화하고 [tableView reloadData] 또는 [tableView reloadRowsAtIndexPaths:NSArray* withRowAnimation:UITableViewRowAnimation];과 함께 셀 내용을 업데이트하는 것이 좋습니다.

터치 한 행을 저장하고 cellForRowAtIndexPathheightForRowAtIndexPath이 호출되면 해당 행이 동일한 행인지 확인하고 그에 따라 행동하십시오.

가용성 관점에서 나는 모든 하위 작업을 처음부터 셀에 넣지 만 셀 프레임 외부에 배치하는 것이 좋습니다. 이렇게하면 셀이 만져지면 셀 높이를 바꿔 셀 프레임 외부의 뷰를 나타낼 수 있습니다. 이렇게하면 콘텐츠를 변경하지 않아도됩니다.

건배!

관련 문제