복잡한 화면 (View Controllers)에서는 모든 것을 작은 조각으로 분리했습니다 (위젯이라고 부릅니다). 이 위젯은 기본적으로 구성 MyWidget.h
하고, MyWidget.m
잘 한 파일 MyWidget.xib
의 루트 요소가있다 파일 UIView
과 MyWidget 클래스가있는 UIView의 파일 소유자이다. 이 위젯의 초기화에서 나는 loadNibNamed
.
내 View Controller에서를 수행 [[MyWidget alloc] init]
하여 View의 Controller 기본보기에 하위보기로 추가합니다. 이것은 지금까지 완벽하게 작동합니다.
이제 스토리 보드로 어떻게 똑같이 할 수 있는지 궁금합니다. UIView
어딘가 에서 드래그를 시작할 수 없기 때문에 항상으로 시작 UIViewController
해야합니다.
스토리 보드로이 작업을 수행 할 수있는 방법이없는 경우, 메인 화면과 세그에 스토리 보드를 사용하고 별도의 .xib 파일을 사용하여 사용자 정의보기를 정의하여 이전 방식으로 간단히 수행 할 수 있습니까?
답변
위젯 / 뷰를 별도의 .xib 파일에 넣는 것이 작동하며 특히 여러 뷰 컨트롤러에서 동일한 뷰를 참조하려는 경우에 적합합니다.
그러나 때로는 동일한 스토리 보드 내에서 추가보기 / 위젯을보고 싶을 때도 있습니다. 방법은 다음과 같습니다.
-
IB에서보기 컨트롤러를 선택한 다음 (보기 아래의 검은 색 막대를 클릭) 개체 라이브러리에서 검은 색 막대로 UIView를 드래그합니다.
-
뷰가 검은 색 막대에 있으면 IB의 다른 뷰처럼 인스턴스화되지만 코드에서 수행 할 때까지 뷰 계층 구조에 추가되지 않습니다. 필요한 경우 자신의 하위 클래스와 일치하도록 뷰의 클래스를 변경합니다.
-
다른 뷰를 연결하는 것처럼 뷰 컨트롤러에 연결할 수 있습니다.
-
추가 된보기는 문서 개요에 표시되며 여기에서 작업과 참조를 연결할 수도 있습니다.
이제 남은 문제는 몇 번을 클릭하거나 더블 클릭을 시도해도 실제로 뷰를 볼 수 없다는 것입니다. 이는 동일한 스토리 보드에 넣는 모든 목적을 무너 뜨립니다. 다행히 내가 아는 두 가지 해결 방법이 있습니다.
첫 번째 해결 방법은 검은 색 막대의 뷰를 뷰 컨트롤러의 뷰로 다시 드래그하고 편집 한 다음 완료되면 검은 색 막대로 다시 드래그하는 것입니다. 이것은 번거롭지 만 신뢰할 수 있습니다.
다른 해결 방법은 더 까다 롭지 만 모든 뷰를 동시에 볼 수 있기 때문에 선호합니다.
-
개체 라이브러리에서 새로 추가 된보기로 UITableView를 끕니다.
-
그런 다음 UITableViewCell을 해당 UITableView로 끕니다.
-
그렇게하면보기가 마술처럼 옆에 튀어 나오지만 원하지 않는 UITableView가 있습니다. 0x0으로 크기를 조정하거나 삭제할 수 있으며 UIView는 (일반적으로) 계속 표시됩니다.
-
때때로 2 차 뷰가 IB에서 다시 숨겨집니다. UITableView를 삭제했거나 UITableView가 여전히 계층 구조에있는 경우 위 단계를 반복 할 수 있습니다. UITableViewCell을 클릭하면보기가 다시 나타납니다.
두 번째 방법은 UIViews에서 작동하지만 UIToolbars에서는 잘 작동하지 않으며 UIButtons에서는 불가능합니다. 따라서 여러 하위보기를 포함해야 할 때 찾은 가장 깨끗한 솔루션은 단일 보조 UIView를 뷰 컨트롤러에 컨테이너로 연결하는 것입니다. 표시되지 않고 모든 보조 뷰를 거기에 넣고 UITableViewCell 트릭을 사용하여 모든 것을 표시하십시오. 내 더미 UITableView의 크기를 0x0으로 조정하여 보이지 않게합니다. 다음은 모든 것이 함께 어떻게 보이는지 보여주는 스크린 샷입니다.
답변
스토리 보드가 아닌 다른 위치에 뷰 컨트롤러를 만들려는 경우이를 수행하는 매우 간단한 방법이 있습니다.
1) 생성 CustomViewController
의 ( abcdController
개별로 내가 시도 코드)를 xib
평소의.
2) 스토리 보드에 UIViewController
(또는 당신의 수퍼 클래스가었던 )를 추가합니다 CustomViewController
.
3)로에서는 CustomClass을 설정 CustomViewController
하는 대신 UIViewController
다음과 같이 :
4) 마지막으로 viewDidLoad
에서 사용자 정의를로드하면 xib
완료됩니다.
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSBundle mainBundle] loadNibNamed:@"abcdController" owner:self options:nil];
// Do any additional setup after loading the view from its nib.
}
답변
Storyboard에서 특정 뷰 컨트롤러의 인스턴스를 가져오고 그 위에 뷰를 사용하려면 이와 같은 작업을 수행 할 수 있다고 생각합니다.
ex:
MyViewController* myViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"myViewController"];
UIView* view = myViewController.view; //Get the view from your StoryBoard.
도움이 되었기를 바랍니다
감사합니다 Vijay