programing

프로그래밍 방식으로 Segue를 수행하고 대상 보기에 매개 변수 전달

batch 2023. 6. 10. 08:34
반응형

프로그래밍 방식으로 Segue를 수행하고 대상 보기에 매개 변수 전달

내 앱에는 segue를 프로그래밍 방식으로 수행하는 버튼이 있습니다.

- (void)myButtonMethod
{
    //execute segue programmatically
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}

목적지 뷰를 참조하고 파라미터를 전달할 수 있는 방법이 있는지 알고 싶습니다.

나는 그것은.prepareForSegue방법, 나는 그것을 다음과 같이 참조할 수 있습니다.myDestinationViewController *vc = [segue destinationViewController];세그를 프로그래밍 방식으로 실행하는 방법을 모르겠습니다.

무슨 생각 있어요?

고마워, 야사


업데이트:

이런 질문을 해서 죄송합니다!!!나는 단지 세그가 프로그래밍 방식으로 호출되더라도,prepareForSegue메소드는 어차피 호출되므로 동일한 일반적인 방법으로 매개 변수를 전달할 수 있습니다.

답은 단순히 segue가 어떻게 트리거되는지에 아무런 차이가 없다는 것입니다.

prepareForSegue:sender:메소드는 어떤 경우에도 호출되며 여기서 매개 변수를 전달합니다.

오래된 질문이지만 여기 당신이 요구하는 것을 어떻게 하는지에 대한 코드가 있습니다.이 경우 테이블 보기에서 선택한 셀의 데이터를 다른 보기 컨트롤러로 전달합니다.

trget 뷰의 .h 파일에서:

@property(weak, nonatomic)  NSObject* dataModel;

.m 파일:

@synthesize dataModel;

dataModel수 있습니다.string,int또는 이 경우처럼 많은 항목이 포함된 모델입니다.

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }

아니면...

- (void)someMethod {
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
    [self.navigationController pushViewController: myController animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) {
        UITableViewCell *cell = (UITableViewCell *) sender;
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]];
        StoryModel *storyModel = [[StoryModel alloc] init];
        storyModel = storiesDict;
        StoryDetails *controller = (StoryDetails *)segue.destinationViewController;
        controller.dataModel= storyModel;
    }
}

스위프트 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ExampleSegueIdentifier" {
        if let destinationVC = segue.destination as? ExampleSegueVC {
            destinationVC.exampleString = "Example"
        }
    }
}

스위프트 3:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ExampleSegueIdentifier" {
            if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
                destinationVC.exampleString = "Example"
            }
        }
    }

저는 segue를 한 곳에서 수행하고 segue에 대비하여 파라미터를 전송하는 상태를 유지하는 문제를 이해합니다.

방법을 생각해냈어요범주를 사용하여 ViewControllers에 userInfoDict라는 속성을 추가했으며, 발신자가 self(컨트롤러 자체를 의미)인 경우 segue를 식별자로 재정의했습니다.이 userInfoDict를 다음 ViewController에 전달합니다.

여기서 전체 UserInfoDict를 전달하는 대신 특정 매개 변수를 보낸 사람으로 전달하고 그에 따라 재정의할 수도 있습니다.

당신이 명심해야 할 한 가지.당신의 performSegue 메소드에서 super 메소드를 호출하는 것을 잊지 마세요.

새로운 swift 버전을 사용하는 경우.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ChannelMoreSegue" {

        }
}

언급URL : https://stackoverflow.com/questions/9248798/perform-segue-programmatically-and-pass-parameters-to-the-destination-view

반응형