【问题标题】:Programmatically adding Segue to UIImageView Which forwards it to a new ViewController Objective C?以编程方式将 Segue 添加到 UIImageView 哪个将其转发到新的 ViewController 目标 C?
【发布时间】:2017-08-23 19:10:11
【问题描述】:

我有一个 SrollView,其中已经添加了 3 个视图(view1、view2、view3)。我想以编程方式在 view3 上添加一个图像。 当您单击图像时,它将转到一个不同的新视图控制器(DestiationViewController)。 之后,我想启用 NSUserDefault 进行一次单击操作,这样如果单击图像一次,它将转到 DestinationViewController。在第二次运行期间,它将直接转到 DestinationViewController。

请帮助我,因为我是初学者。

提前谢谢。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    在您的 UIImageView 点击事件中添加以下代码以打开您的目标视图控制器:

    [self performSegueWithIdentifier:"SegueIdentifier" sender:self];
    

    设置 UIImageview 点击事件使用以下方法:

    UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
    
    [myImageView setUserInteractionEnabled:YES];
    
    [myImageView addGestureRecognizer:newTap];
    
    
    
    
     -(void)myTapMethod{
            // treat image tap
    
           NSString *valueToSave = @"destinationVisited";
          [[NSUserDefaults standardUserDefaults] setObject:valueToSave 
    forKey:@"preferenceName"];
          [[NSUserDefaults standardUserDefaults] synchronize];
    
          // Navigate
          [self performSegueWithIdentifier:"SegueIdentifier" sender:self];
        }
    

    添加您可以设置 NSUserdefault 并在单击图像时更新 NSUserdefault 值并在应用委托处检查 NSUserdefault 并根据 NSUserdefault 值打开目标视图控制器。

    根据您的要求在 viewWillAppear 或应用程序删除方法中检查 NSUserdefault。

    NSString *savedValue = [[NSUserDefaults standardUserDefaults]
        stringForKey:@"preferenceName"];
    
    if(savedValue == @'destinationVisited')
    {
        [self performSegueWithIdentifier:"SegueIdentifier" sender:self];
    }
    

    【讨论】:

    • 按照您的建议执行操作后,我收到此错误-“由于未捕获的异常 'NSInternalInconsistencyException' 而终止应用程序,原因:'无法使用标识符'destination'执行转场。转场必须具有执行句柄,否则它必须覆盖 -perform。”请注意,我的 StoryBoardSegue 标识符名称是“destination”。如果这是一个小错误,请原谅我,因为我只是一个初学者。
    • 检查你的 segue 标识符,错误看起来 segue 没有正确设置。
    • 是的,已经解决了,无论如何,再次感谢您的不断解决。
    【解决方案2】:

    你可以通过两种方式做到这一点。

    1. 在 AppDelegate 中检查 NSUserDefaults 值。如果值为 true,则以编程方式更改初始视图控制器。你可以google一下。 “如何在 iOS 中以编程方式更改初始视图控制器”喜欢这个。
    2. 这种方式不好,但可以满足您的方案。在初始视图控制器 ViewDidLoad 方法中检查 userDefaults 值。如果为 true,则显示目标视图控制器。但是这里你必须以很小的时间间隔呈现目标控制器。

      [self performSelector:@selector(presentDestination) withObject:nil afterDelay:0.0];

    使用此方法在 presentDestination 方法中,您可以展示您的目标屏幕。

    【讨论】:

    • 感谢您的快速回复。如果以后需要,请帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多