2011-10-11 2 views
1

오늘 뭔가 이상하게 보였습니다. 누군가 뭔가를 알고 있을지도 모릅니다. UIViewController 및 해당 NIB 하위 클래스가 있습니다. UIViewController 메서드 및 잘 작동하는 모든 레이블을 설정합니다.pushViewController, UILabel 텍스트를 설정할 때 및 setNeedsDisplay를 호출해야합니까?

이제 다른 클래스에서 다시 사용하려는 ViewController를 다시 만듭니다. 나는이 작업을 수행 :

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
vc.titleLabel.text = @"testing"; 
vc.myTextLabel.text = @"yo"; 
self.navigationController pushViewController:vc animated:NO]; 
[vc release]; 

이 수행 하지 일을. 왜 이것이 작동하지 않는지 나는 모른다. 모든 레이블을 설정 한 다음 스택에 밀어 넣어보기 컨트롤러를 표시한다고 생각합니다.

그러나, 내가 할 경우이 :

[vc.view setNeedsDisplay]; // why here??? 
MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
vc.titleLabel.text = @"testing"; 
vc.myTextLabel.text = @"yo"; 
self.navigationController pushViewController:vc animated:NO]; 
[vc release]; 

작업을 수행합니다. 이것은 나에게 이해가되지 않는다. 뷰를 다시 그려야하는 후에 setNeeds Display가 호출되었다고 생각했습니다. setNeedsDisplay를 블록의 끝으로 옮기면 작동하지 않습니다. 그것은 단지 나에게 매우 이상한 블록의 시작 부분에서만 작동합니다. 이전에이 문제가 발생했거나 왜 이렇게 작동하는지 알 수 있습니까? 감사.

+0

두 번째 스 니펫은 컴파일되지 않습니다. 주로 vc가 선언되기 전에 참조되기 때문에 (두 번째는 self.navigationController 앞에 여는 것이 없어서). alloc + init 행 다음에 setNeedsDisplay를 호출하지 않습니까? 이는 vc의 뷰를로드하고 IBOutlet을 초기화해야하기 때문에 효과가 있습니다. – Anna

답변

7

이유는보기 컨트롤러의보기가 느슨하게로드되기 때문입니다. 즉, 컨트롤러의 뷰는 처음으로 view 속성에 액세스 할 때 펜촉 (또는 -loadView)을 통해서만로드됩니다. 보기가로드되기 전에 레이블에 액세스하려고 시도하면 레이블이 무시되고 사용자가 보낸 모든 메시지는 no-ops가됩니다.

그래서로드 뷰를 강제로, 당신은이 작업을 수행 할 수 있습니다

/* make sure the view is loaded */ 
[vc view]; 
/* Access the label properties */ 
vc.titleLabel.text = @"testing"; 

을하지만, 모든 상황에서 좋은 생각되지 않을 수도 있습니다로드 뷰를 강제로 뷰 컨트롤러가 않을 것입니다 특히 즉시 표시되고 메모리를 저장하려고합니다.

이 경우 제어기의 init 메소드에서 레이블을 생성하여 항상 존재하도록 할 수 있으며 펜촉이 아닌 -viewDidLoad에 수동으로보기 컨트롤러보기에 추가 할 수 있습니다. 이렇게하면 표준 지연로드 동작을 사용할 수 있지만 클래스의 사용자는보기가로드되기 전에 레이블에서 속성을 설정할 수 있습니다.

다른 방법으로보기 컨트롤러에서 관련 이바라기가있는 간단한 NSString 속성을 표시하여보기의 제목이나 텍스트를 나타낼 수 있습니다. 그런 다음 -viewDidLoad에서 라벨의 텍스트를 이러한 속성의 값으로 설정할 수 있습니다. 그런 다음보기 컨트롤러를 사용하면보기가로드되기 전에 이러한 속성을 설정할 수 있습니다.

+0

위대한 설명. 그것은 많은 도움이됩니다. 감사. –

관련 문제