0

UITableViewDelegate 및 UIScrollViewDelegate에서 상속받은 UIViewController (VC)가 있습니다. 이전 UIViewController는 다음과 같이 VC를로드합니다.테이블 뷰 행으로 스크롤하는 방법은 무엇입니까?

[self.view addSubview:VC.view]; 

이는 viewWillAppear이 실행되지 않음을 의미합니다.

[VC viewWillAppear]; 

를하지만 내가 스크롤 할 때 비어있는 tableview 참조 결과 cellForRowAtIndexPath, 전에 실행됩니다 : 난 그냥 위의 줄 끝에서 그 방법을 추가 할 수 있습니다.

VC로드시 테이블의 특정 행으로 스크롤하고 싶습니다. 그러나 tableview의 cellForRowAtIndexPath가 언제 완료되었는지 (viewWillAppear가 없음) 모르기 때문에 스크롤 코드를 넣을 곳이 없습니다. 나는 이미 tableview에 대한 참조를 유지하고 그것을 스크롤하는데 사용할 수있다. 그러나 스크롤 코드는 어디에 둘 수 있습니까?

답변

0

UIViewController가 '상속'이 아닌 UITableViewDelegate 및 UIScrollViewDelegate 프로토콜을 준수한다는 것을 의미합니까?

상위 뷰 컨트롤러에서 [VC viewWillAppear :]을 직접 호출 할 수 있습니다. VC에서 처리하는 뷰가 항상 다른 뷰 컨트롤러 뷰의 하위 뷰이면 UITableView를 백업하려면 전체 UIViewController 인스턴스가 실제로 필요합니까? 당신은 테이블 뷰를위한 델리게이트와 데이터 소스 구현을 제공 할 수있다.

그러면 인터페이스 뷰어에서 개체를 추가하여 테이블 뷰를 정의하는 NIB 또는 현재 VC에 대한 부모 인 뷰 컨트롤러의 viewDidLoad 메서드에서 대리자 및 데이터 소스를 인스턴스화 할 수 있습니다.

+0

예 - "준수 함". VC에는 연결된 NIB가 있으므로 ViewController가되어야합니다. NIB가 tableview 대리자를 인스턴스화하는 것에 대해 무슨 뜻인지 알겠지만 다시 scrollTo 코드는 어디로 이동합니까? – 4thSpace

+0

부모 VC가 전화를 걸 때 : [self.view addSubview : VC.view]; – teabot

0


확실하게 새로운보기 컨트롤러의보기가 추가되어 표시되면 확실히 viewWillAppear가 아닌 viewDidAppear을 호출합니다. 거기에 스크롤 코드를 붙이겠습니다.

그래도 작동하지 않으면 init 메소드에서 지연을 시도하십시오. 이런 식으로 뭔가 : 뷰 컨트롤러의 뷰가 항상 같은 시간 이후에 표시되지 않을 수도 있지만

[self performSelector:@selector(myScrollingFunction) withObject:nil afterDelay:2.0]; 

당신은 맞는 무언가를 얻을 수있는 지연 시간 함께 놀러 수 있습니다.

관련 문제