gpt4 book ai didi

ios - 如何实例化第二个 ViewController 并停止第一个 ViewController 的方法

转载 作者:行者123 更新时间:2023-11-28 22:29:19 26 4
gpt4 key购买 nike

我有一个非常基本的应用程序,其中如果“if”语句的条件为真,则会实例化第二个 ViewController。在加载第二个 ViewController 时,第一个 ViewController 的方法仍然运行。我需要停止所有以前的方法才能使应用程序正常运行。

//在 FirstViewController.h 中

#import <UIKit/UIKit.h>

@interface FirstViewController : UIViewController
{
NSTimeInterval beginTouchTime;
NSTimeInterval endTouchTime;
NSTimeInterval touchTimeInterval;
}

@property (nonatomic, readonly) NSTimeInterval touchTimeInterval;

- (void) testMethod;

@end

//在 FirstViewController.m 中

#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation FirstViewController

@synthesize touchTimeInterval;

- (void)viewDidLoad
{
[super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

- (void) testMethod
{
if (touchTimeInterval >= 3)
{
NSLog(@"Go to VC2");
SecondViewController *secondBViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self presentViewController:secondViewController animated:YES completion:nil];
}
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
beginTouchTime = [event timestamp];
NSLog(@"Touch began");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
endTouchTime = [event timestamp];
NSLog(@"Touch ended");

touchTimeInterval = endTouchTime - beginTouchTime;
NSLog(@"Time interval: %f", touchTimeInterval);

[self testMethod]; // EDIT: USED TO BE IN viewDidLoad

}

@end

第二个屏幕成功加载,但日志消息仍然存在,这意味着 FirstViewController 的方法仍然发生,尽管在 SecondViewController 的 View 中。我做错了什么?

最佳答案

您看到的是 UIKit 中事件处理方式的结果(查看“iOS 事件处理指南”,尤其是“事件传递:响应者链”部分)。所以发生的事情是,由于 SecondViewController 的 View 没有覆盖 touchesBegan 或 touchesEnded,触摸被传递到响应链,首先到 SecondViewController,然后到 FirstViewController,它最终处理这些事件(FirstViewController 仍然是窗口的 Root View Controller ,之后模态表示)。

解决这个问题的两种方法。您可以在 SecondViewController(或者我猜它的 View )中覆盖 touchesBegan 和 touchesEnded,并且只有空方法。

另一种方法是子类化 FirstViewController 的 View ,并覆盖那里的方法,而不是 Controller 中的方法。您仍然需要从 Controller 进行 SecondViewController 的呈现——您可以使用 [self.nextResponder someMethod] 从 View 中调用一个方法来完成该操作。

关于ios - 如何实例化第二个 ViewController 并停止第一个 ViewController 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com