나는 UIViewController
모든 UIViewsControllers
공통된 작업을 재사용하기 위해 확장한다는 공통점이 있습니다.
나는이 “공통”에 UIViewController
대해 다른 모든 것이 UIViewControllers
상속 되도록 세구를 설정하고 싶다 .
프로그래밍 방식으로 어떻게해야합니까?
질문은 스토리 보드에 가지 않고 손으로 직접하지 않고 어떻게 segue
모두를 위해 어떻게 설정할 수있을 것 같아요 UIViewControllers
.
답변
정의상 segue는 스토리 보드와 독립적으로 존재할 수 없습니다. 클래스 이름에도 있습니다 UIStoryboardSegue
. 프로그래밍 방식으로 segue를 만들지 마십시오. 스토리 보드 런타임이 만들어집니다. 일반적으로 performSegueWithIdentifier:
뷰 컨트롤러의 코드를 호출 할 수 있지만 스토리 보드에 이미 참조 용 segue가 설정되어 있어야합니다.
내가 생각하는 것은 공통 뷰 컨트롤러 (기본 클래스)에서 새 뷰 컨트롤러로 전환하고 모든 파생 클래스에서 상속되는 메서드를 만드는 방법입니다. 기본 클래스 뷰 컨트롤러에 이와 같은 메소드를 작성하여이를 수행 할 수 있습니다.
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
그런 다음 파생 클래스에서 적절한 버튼을 클릭하거나 테이블 행을 선택하거나 그 밖의 것을 선택하면 해당 메소드를 호출하십시오.
답변
나는 또 다른 가능성을 추가 할 것이라고 생각했다. 수행 할 수있는 작업 중 하나는 액션에 연결되지 않은 segue를 사용하여 스토리 보드에서 두 장면을 연결 한 다음 뷰 컨트롤러 내에서 segue를 프로그래밍 방식으로 트리거 할 수 있다는 것입니다. 이렇게하는 방법은 스토리 장면의 맨 아래에있는 파일의 소유자 아이콘에서 segueing scene 인 드래그하여 대상 장면으로 마우스를 끌어 야한다는 것입니다. 설명을 돕기 위해 이미지를 던질 것입니다.
“Manual Segue”팝업이 나타납니다. 유형으로 푸시를 선택했습니다. 작은 사각형을 탭하고 속성 관리자에 있는지 확인하십시오. 코드에서 참조 할 때 사용할 식별자를 제공하십시오.
좋아, 다음은 프로그래밍 방식의 바 버튼 항목을 사용하여 정리하겠습니다. viewDidLoad 또는 다른 곳에서 탐색 코드에 다음 코드를 사용하여 버튼 항목을 만듭니다.
UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
style:UIBarButtonItemStyleDone
target:self
action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];
좋아, 선택기는 buttonizeButtonTap :입니다. 따라서 해당 버튼에 대해 void 메소드를 작성하고 해당 메소드 내에서 다음과 같이 segue를 호출합니다.
-(void)buttonizeButtonTap:(id)sender{
[self performSegueWithIdentifier:@"Associate" sender:sender];
}
prepareForSegue가 호출 될 때 버튼을 식별하려면 sender 매개 변수가 필요합니다. PreparingForSegue는 장면을 인스턴스화하고 작업에 필요한 값을 전달하는 프레임 워크 방법입니다. 내 방법은 다음과 같습니다.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"Associate"])
{
TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
translationQuizAssociateVC.contentID = self.contentID;
translationQuizAssociateVC.index = self.index;
translationQuizAssociateVC.content = self.content;
}
}
좋아, 방금 테스트했고 작동합니다. 그것이 당신을 돕기를 바랍니다.
답변
이 코드를 사용하여 사용자 정의 segue 서브 클래스를 인스턴스화하고 프로그래밍 방식으로 실행했습니다. 작동하는 것 같습니다. 이것에 문제가 있습니까? 나는 할 수 없다는 다른 모든 답변을 읽고 의아해합니다.
UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];
답변
이 답변에 동의하고 추측하지만 몇 가지 세부 정보를 추가하고 싶습니다.
로그인 화면을 첫 번째 화면으로 표시하고 로그인이 올바른 경우 응용 프로그램을 보려고하는 문제를 해결하기 위해 수행 한 작업. login-view controller에서 root view controller까지 segue를 생성하고 “myidentifier”와 같은 식별자를 부여했습니다.
그런 다음 모든 로그인 코드를 확인한 후 로그인이 올바른지 확인하십시오.
[self performSegueWithIdentifier: @"myidentifier" sender: self];
내 가장 큰 오해는 내가 segue를 버튼에 넣고 segue가 발견되면 방해하는 것입니다.
답변
UIStoryboard
사용중인 코드를 코드에 연결해야합니다 . 에서 YourViewController 로 이동하고 UIStoryboard
주위의 테두리를 클릭 한 다음 해당 identifier
필드를 NSString
코드에서 호출 하는 필드로 설정 하십시오.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
YourViewController *yourViewController =
(YourViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];
답변
스토리 보드에있는 컨트롤러 용.
jhilgert00이 찾고 계십니까?
-(IBAction)nav_goHome:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
[self.navigationController pushViewController: myController animated:YES];
}
또는…
[self performSegueWithIdentifier:@"loginMainSegue" sender:self];
답변
UIStoryBoardSegue를 만들고 서브 클래 싱 할 수도 있습니다. 서브 클래 싱은 주로 사용자 정의 전환 애니메이션을 제공하는 데 사용됩니다.
StoryBoard를 소개하는 wwdc 2011의 비디오를 볼 수 있습니다. 유튜브에서도 사용할 수 있습니다.