프로그래밍 방식으로 segue 작성
있다.UIViewController의 모든 UIViewsControllers일반적인 작업을 재사용할 수 있도록 확장합니다.
에 '공통'을 설치하고 .UIViewController 모든 을 할 수 UIViewControllers속하하
나는 그것을 어떻게 프로그램적으로 하는지 알아내려 하고 있다.
,, 제, 게, 게, 저, 저, 할 수 가 될 도 있을 것 요.segueUIViewControllers게시판에 들어가서 직접 할 필요 없이 말이죠.
다른 가능성을 더해야겠다고 생각했어요.액션에 연결되지 않은 segue를 사용하여 스토리보드의 두 장면을 연결한 다음 뷰 컨트롤러 내에서 segue를 프로그래밍 방식으로 트리거할 수 있습니다.이 방법은 스토리보드 장면 하단의 파일 소유자 아이콘에서 드래그하여 대상 장면으로 오른쪽 드래그해야 합니다.설명을 돕기 위해 이미지를 제출하겠습니다.

"Manual Segue"에 대한 팝업이 표시됩니다.저는 Push를 유형으로 선택했어요.작은 사각형을 누르고 속성 검사기로 들어가는지 확인합니다.코드로 참조하기 위해서 사용하는 식별자를 지정합니다.

자, 다음은 프로그램 바버튼 항목을 사용해서 세그를 해보겠습니다.viewDidLoad 또는 다른 곳에서 다음 코드를 사용하여 탐색 모음에 버튼 항목을 만듭니다.
UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
style:UIBarButtonItemStyleDone
target:self
action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];
좋아, 셀렉터가 버튼화 되어 있는 걸 봐버튼 탭:따라서 해당 버튼에 대해 void 메서드를 작성하고 이 메서드 내에서 segue를 다음과 같이 호출합니다.
-(void)buttonizeButtonTap:(id)sender{
[self performSegueWithIdentifier:@"Associate" sender:sender];
}
prepareForSegue 호출 시 버튼을 식별하기 위해 sender 파라미터가 필요합니다.prepareForSegue는 장면을 인스턴스화하고 작업을 수행하는 데 필요한 모든 값을 전달하는 프레임워크 방법입니다.방법은 다음과 같습니다.
- (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는 스토리보드와는 독립적으로 존재할 수 없습니다.UIStoryboardSegue세그먼트는 프로그래밍 방식으로 작성하는 것이 아니라 스토리보드 런타임에 의해 작성됩니다. 이렇게 돼요.performSegueWithIdentifier:참조용으로 스토리보드에 segue가 이미 설정되어 있어야 합니다.
여기서 묻고 있는 것은 새로운 뷰 컨트롤러로 이행하여 파생된 모든 클래스에서 상속되는 메서드를 공통 뷰 컨트롤러(기본 클래스)에서 작성하는 방법입니다.기본 클래스 뷰 컨트롤러에 다음과 같은 메서드를 생성하여 이를 수행할 수 있습니다.
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
그런 다음 파생 클래스에서 적절한 버튼을 클릭하거나 테이블 행이 선택되면 해당 메서드를 호출합니다.
이 코드를 사용하여 커스텀 segue 서브클래스를 인스턴스화하고 프로그래밍 방식으로 실행하고 있습니다.효과가 있는 것 같아요.무슨 문제라도 있나요?안 된다고 다른 답을 다 읽으니 당황스럽네요.
UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];
답변 및 수락된 것 같습니다만, 여기에 몇 가지 세부 사항을 추가하고 싶습니다.
로그인 뷰를 첫 화면으로 표시하고 로그인이 맞으면 어플리케이션으로 이동하는 문제를 해결하기 위해 무엇을 했습니까?로그인 뷰 컨트롤러에서 루트 뷰 컨트롤러로 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를 만들 수도 있고 서브클래스를 만들 수도 있습니다.서브클래싱은 주로 커스텀 트랜지션애니메이션 제공에 사용됩니다.
스토리보드를 소개하는 wwdc 2011 비디오를 볼 수 있습니다.유튜브에서도 볼 수 있어요.
설명을 덧붙이고 싶은데...
사실 제가 한동안 가지고 있던 일반적인 오해는 스토리보드 세그가 그 게임들에 의해 촉발된다는 것입니다.prepareForSegue:sender:방법.그것은 아니다.스토리보드 segue는 구현 여부에 관계없이 실행됩니다.prepareForSegue:sender:메서드를 지정합니다.
폴 헤가티의 훌륭한 아이튠즈U 강의에서 배웠죠죄송하지만 어떤 강의인지 기억이 안 나요.
스토리보드의 2개의 뷰 컨트롤러 사이에 segue를 접속하지만, 실장하지 않는 경우prepareForSegue:sender:세그, 세게, 세게그러나 이 뷰 컨트롤러는 준비되지 않은 상태로 표시됩니다.
이게 도움이 됐으면 좋겠다.
스토리보드 세그먼트(Segues)는 스토리보드 외부에서 작성되지 않습니다.결점에도 불구하고 당신은 그것을 배선할 필요가 있을 것이다.
UIStoryboardSegue 참조에는 다음과 같이 명시되어 있습니다.
segue 객체를 직접 작성하지 않습니다.대신 스토리보드 런타임에 의해 두 뷰 컨트롤러 간에 segue를 수행해야 할 때 이러한 컨트롤러가 생성됩니다.원하는 경우 UIViewController의 performSegueWithIdentifier:sender: 메서드를 사용하여 프로그래밍 방식으로 segue를 시작할 수 있습니다.이를 통해 프로그래밍 방식으로 추가되었기 때문에 Interface Builder에서 사용할 수 없는 소스에서 segue를 시작할 수 있습니다.
''를 해서 뷰 할 수 .presentModalViewController: ★★★★★★★★★★★★★★★★★」pushViewController:animated:하지만 스토리보드 인스턴스가 필요합니다.
요.UIStoryboardbundle.s class에 이 0인 s 합니다.
storyboardWithName:bundle:
먼저 스토리보드에 두 개의 다른 뷰가 있고 한 화면에서 다른 화면으로 이동하려면 다음 단계를 따르십시오.
1) 아이덴티티 인스펙터에서 클래스 파일과 스토리보드 ID를 사용하여 모든 뷰를 정의합니다.
2) 첫 번째 보기에 Navigation Controller를 추가해야 합니다.Storyboard에서 선택하고 Editor > Embedd In > Navigation Controller 순으로 선택합니다.
3) 첫 번째 클래스에서 "second Class"를 Import합니다.h"
#import "ViewController.h
#import "secondController.h"
4) segue를 수행해야 하는 IBAtion에 이 명령을 추가합니다.
secondController *next=[self.storyboard instantiateViewControllerWithIdentifier:@"second"];
[self.navigationController pushViewController:next animated:YES];
5)@"second"id.secondview, ID가 있습니다.
UIStoryboard의 세그먼트(segues)를 리버스 엔지니어링하여 오픈 소스(re)로 만들었습니다.https://github.com/acoomans/Segway
이 라이브러리를 사용하면 (스토리보드 없이) 프로그래밍 방식으로 세그먼트를 정의할 수 있습니다.
도움이 되길 바랍니다.
실제로 몇 가지 문제가 있습니다.
첫째, 업로드한 프로젝트에서는 segue1 식별자가 없습니다.
식별자 없음
아직 작성하지 않았다면 그 식별자를 작성해야 합니다.
둘째, 테이블 뷰에서 테이블 뷰로 푸시할 때 initWithNibName을 호출하여 뷰 컨트롤러를 만듭니다.instantiateViewControllerWithIdentifier를 꼭 사용해야 합니다.
.Creating a segue programmatically:
class ViewController: UIViewController {
...
// 1. Define the Segue
private var commonSegue: UIStoryboardSegue!
...
override func viewDidLoad() {
...
// 2. Initialize the Segue
self.commonSegue = UIStoryboardSegue(identifier: "CommonSegue", source: ..., destination: ...) {
self.commonSegue.source.showDetailViewController(self.commonSegue.destination, sender: self)
}
...
}
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// 4. Prepare to perform the Segue
if self.commonSegue == segue {
...
}
...
}
...
func actionFunction() {
// 3. Perform the Segue
self.prepare(for: self.commonSegue, sender: self)
self.commonSegue.perform()
}
...
}
언급URL : https://stackoverflow.com/questions/9674685/creating-a-segue-programmatically
'programing' 카테고리의 다른 글
| 변경된 여러 파일 중 하나의 파일만 저장하는 방법은 무엇입니까? (0) | 2023.04.19 |
|---|---|
| Git 태그의 이름을 바꾸려면 어떻게 해야 하나요? (0) | 2023.04.19 |
| Bash에서 파일 또는 표준 입력에서 읽는 방법 (0) | 2023.04.14 |
| 'Get-ADUser' 용어가 cmdlet 이름으로 인식되지 않습니다. (0) | 2023.04.14 |
| Excel에서 상위 5개 최대값 추출 (0) | 2023.04.14 |