[ios] Storyboard를 사용한 사용자 지정보기

복잡한 화면 (View Controllers)에서는 모든 것을 작은 조각으로 분리했습니다 (위젯이라고 부릅니다). 이 위젯은 기본적으로 구성 MyWidget.h하고, MyWidget.m잘 한 파일 MyWidget.xib의 루트 요소가있다 파일 UIView과 MyWidget 클래스가있는 UIView의 파일 소유자이다. 이 위젯의 ​​초기화에서 나는 loadNibNamed.

내 View Controller에서를 수행 [[MyWidget alloc] init]하여 View의 Controller 기본보기에 하위보기로 추가합니다. 이것은 지금까지 완벽하게 작동합니다.

이제 스토리 보드로 어떻게 똑같이 할 수 있는지 궁금합니다. UIView어딘가 에서 드래그를 시작할 수 없기 때문에 항상으로 시작 UIViewController해야합니다.

스토리 보드로이 작업을 수행 할 수있는 방법이없는 경우, 메인 화면과 세그에 스토리 보드를 사용하고 별도의 .xib 파일을 사용하여 사용자 정의보기를 정의하여 이전 방식으로 간단히 수행 할 수 있습니까?



답변

위젯 / 뷰를 별도의 .xib 파일에 넣는 것이 작동하며 특히 여러 뷰 컨트롤러에서 동일한 뷰를 참조하려는 경우에 적합합니다.

그러나 때로는 동일한 스토리 보드 내에서 추가보기 / 위젯을보고 싶을 때도 있습니다. 방법은 다음과 같습니다.

  1. IB에서보기 컨트롤러를 선택한 다음 (보기 아래의 검은 색 막대를 클릭) 개체 라이브러리에서 검은 색 막대로 UIView를 드래그합니다.

    여기에 이미지 설명 입력

  2. 뷰가 검은 색 막대에 있으면 IB의 다른 뷰처럼 인스턴스화되지만 코드에서 수행 할 때까지 뷰 계층 구조에 추가되지 않습니다. 필요한 경우 자신의 하위 클래스와 일치하도록 뷰의 클래스를 변경합니다.

    여기에 이미지 설명 입력

  3. 다른 뷰를 연결하는 것처럼 뷰 컨트롤러에 연결할 수 있습니다. 여기에 이미지 설명 입력

  4. 추가 된보기는 문서 개요에 표시되며 여기에서 작업과 참조를 연결할 수도 있습니다.

    여기에 이미지 설명 입력


이제 남은 문제는 몇 번을 클릭하거나 더블 클릭을 시도해도 실제로 뷰를 볼 수 없다는 것입니다. 이는 동일한 스토리 보드에 넣는 모든 목적을 무너 뜨립니다. 다행히 내가 아는 두 가지 해결 방법이 있습니다.

첫 번째 해결 방법은 검은 색 막대의 뷰를 뷰 컨트롤러의 뷰로 다시 드래그하고 편집 한 다음 완료되면 검은 색 막대로 다시 드래그하는 것입니다. 이것은 번거롭지 만 신뢰할 수 있습니다.

다른 해결 방법은 더 까다 롭지 만 모든 뷰를 동시에 볼 수 있기 때문에 선호합니다.

  1. 개체 라이브러리에서 새로 추가 된보기로 UITableView를 끕니다.

  2. 그런 다음 UITableViewCell을 해당 UITableView로 끕니다.

    여기에 이미지 설명 입력

  3. 그렇게하면보기가 마술처럼 옆에 튀어 나오지만 원하지 않는 UITableView가 있습니다. 0x0으로 크기를 조정하거나 삭제할 수 있으며 UIView는 (일반적으로) 계속 표시됩니다.

  4. 때때로 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


답변