ios怎么判断我点击的哪个视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios怎么判断我点击的哪个视图相关的知识,希望对你有一定的参考价值。

参考技术A

您好,很高兴为您解答。


你的意思是两个view,通过点击手势进行判断,如果是这样,设置tag来区分

    view1.tag = 1;
<br>
<br>    UITapGestureRecognizer *tapGestureRecognizer1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
<br>
<br>    [view1 addGestureRecognizer:tapGestureRecognizer];
<br>
<br>    
<br>
<br>    view2.tag = 2;
<br>
<br>    UITapGestureRecognizer *tapGestureRecognizer2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
<br>
<br>    [view2 addGestureRecognizer:tapGestureRecognizer2];
<br>
<br>
<br>
<br>- (void)tapped:(UITapGestureRecognizer *)gesture
<br>
<br>
<br>
<br>    UIView *targetview = gesture.view;
<br>
<br>    if(targetview.tag == 1) 
<br>
<br>        
<br>
<br>    
<br>
<br>


如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】


希望我的回答对您有所帮助,望采纳!


                                                                                                                             ~ O(∩_∩)O~

本回答被提问者和网友采纳

如何确定从iOS后台返回前台时加载哪个视图?

【中文标题】如何确定从iOS后台返回前台时加载哪个视图?【英文标题】:how to determine which view loads on returning to foreground from the background in iOS? 【发布时间】:2011-09-21 11:21:47 【问题描述】:

我有一个具有多个视图的应用程序。 当我从后台回到前台时,我想确定我目前在哪个视图中。我该怎么做?

[编辑]

我了解 navigationController 的 visibleViewController 属性可能会有所帮助。但是,我想知道如何使用它返回的指针与 UIViewController 对象进行比较。我们如何比较指针? 一些代码 sn-ps 会很有帮助。

【问题讨论】:

【参考方案1】:

zirinisp 在 Swift 中的回答:

extension UIWindow 
    func visibleViewController() -> UIViewController? 
        if let rootViewController: UIViewController  = self.rootViewController 
            return UIWindow.getVisibleViewControllerFrom(rootViewController)

    
    return nil


class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController 
if vc.isKindOfClass(UINavigationController.self) 

    let navigationController = vc as UINavigationController
    return UIWindow.getVisibleViewControllerFrom( navigationController.visibleViewController)

 else if vc.isKindOfClass(UITabBarController.self) 

    let tabBarController = vc as UITabBarController
    return UIWindow.getVisibleViewControllerFrom(tabBarController.selectedViewController!)

 else 

    if let presentedViewController = vc.presentedViewController 

        return UIWindow.getVisibleViewControllerFrom(presentedViewController)

     else 

        return vc;
    


用法:

if let topController = window.visibleViewController() 
            println(topController)
        

【讨论】:

【参考方案2】:

取决于您使用的根视图控制器。如果你有一个导航控制器,你可以检查visibleViewController 属性来查看当前哪个视图控制器位于导航堆栈的顶部。对于选项卡栏控制器,检查selectedViewController 属性以查看哪个选项卡处于活动状态。如果是两者的结合,请同时使用这两种方法。

每个容器视图控制器都提供了某种方式来确定屏幕上的选定内容或当前内容。如果您要进行自己的特殊设置,则必须想出一种自行确定此信息的好方法。

【讨论】:

..如果您既不使用标签栏也不使用导航栏?你有什么建议? 那么在这种情况下,您可能只是在使用自己的根视图控制器,因此在启动时应该很明显哪个是可见的。 我正在使用导航控制器。 visibleViewController 返回一个 UIViewController。如何检查与我想要的 UIViewController 是否相等 我不确定我是否理解。如果您的应用程序从后台恢复,它将使您回到之前所在的视图控制器。向导航控制器询问可见的视图控制器会为您提供该上下文。 你不能只使用 viewwill/didappear 在 vi​​ewcontroller 出现时对其执行一些操作吗?【参考方案3】:

您想知道您的应用何时进入前台并处于活动状态。这需要位于视图控制器层次结构的根目录 - 可能是您的 AppDelegate,也可能是您的根视图控制器。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appActive:)
                                                 name:UIApplicationDidBecomeActiveNotification 
                                               object:nil];

在 appActive:(NSNotification *)notification;或任何你称之为的方法——按照 LucasTizma 的建议去做。

还记得在完成后清理通知

 [[NSNotificationCenter defaultCenter] removeObserver:self];

【讨论】:

【参考方案4】:

我一直喜欢涉及类别的解决方案,因为它们是固定的并且可以轻松重复使用。

所以我在 UIWindow 上创建了一个类别。您现在可以在 UIWindow 上调用 visibleViewController,这将通过向下搜索控制器层次结构为您提供可见视图控制器。如果您使用导航和/或标签栏控制器,这将有效。如果您有其他类型的控制器可以推荐,请告诉我,我可以添加。

UIWindow+PazLabs.h(头文件)

#import <UIKit/UIKit.h>

@interface UIWindow (PazLabs)

- (UIViewController *) visibleViewController;

@end

UIWindow+PazLabs.m(实现文件)

#import "UIWindow+PazLabs.h"

@implementation UIWindow (PazLabs)

- (UIViewController *)visibleViewController 
    UIViewController *rootViewController = self.rootViewController;
    return [UIWindow getVisibleViewControllerFrom:rootViewController];


+ (UIViewController *) getVisibleViewControllerFrom:(UIViewController *) vc 
    if ([vc isKindOfClass:[UINavigationController class]]) 
        return [UIWindow getVisibleViewControllerFrom:[((UINavigationController *) vc) visibleViewController]];
     else if ([vc isKindOfClass:[UITabBarController class]]) 
        return [UIWindow getVisibleViewControllerFrom:[((UITabBarController *) vc) selectedViewController]];
     else 
        if (vc.presentedViewController) 
            return [UIWindow getVisibleViewControllerFrom:vc.presentedViewController];
         else 
            return vc;
        
    


@end

【讨论】:

以上是关于ios怎么判断我点击的哪个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何确定在 iOS 中点击了哪个视图?

iOS点击事件穿透及扩大视图点击区域

如何确定从iOS后台返回前台时加载哪个视图?

如何知道我之前在 iOS 中的标签栏视图控制器是哪个?

iOS - 如何将选项卡与情节提要中的特定视图控制器链接?

iOS Stackview Tap Buttons在彼此之上