【问题标题】:Adding a UIView class outside ViewController class to show subview在 ViewController 类之外添加 UIView 类以显示子视图
【发布时间】:2012-09-08 19:22:03
【问题描述】:

我在这里查了很多很接近的答案,没有人能解决我的愚蠢问题..

我的问题是:我有 2 个类,UIViewController classA 和 UIView classB。

一个按钮(classA)触发处理(classB),然后在屏幕上显示子视图(classA)。 但它不起作用。

classA .m:

@implementation ViewController
...

- (IBAction)trigger:(UIButton *)sender {
    [classB  makeViewOn];
}

classB .h:

#import <UIKit/UIKit.h>

@interface classB : UIView
+ (void)makeViewOn;

@end

classB .m:

#import "classB.h"

#import "ViewController.h"

@implementation classB

+ (void)makeViewOn
{        
    ViewController *pointer = [ViewController new];
    UIWindow *window = pointer.view.window;

    classB *overlayView = [[classB alloc] initWithFrame:window.bounds];
    overlayView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
    overlayView.userInteractionEnabled = YES;

    [pointer.view addSubview:overlayView];
}

@end

如果我只在一个类 UIViewController 中执行此操作,它可以正常工作;但是,如果我在两个单独的类(UIViewController 和 UIView)上执行此操作,我该如何解决?

我在类之间通信的基本概念上做错了吗?

非常感谢!

【问题讨论】:

  • 单独的 UIView 类需要什么?只需在您的视图控制器中声明一个 UIView 并将其隐藏,当按下按钮时,只需取消隐藏您的视图
  • 是的。实际上我只是不想在我的 ViewController 中放入太多代码,而不是将它们分成不同的类。这种方式让我保持清晰和易于修复错误。哈哈..反正我还是个初学者!

标签: iphone xcode uiview uiviewcontroller subview


【解决方案1】:

首先,您正在创建一个名为 pointer 的 ViewController 类的新对象,因此您的 classB 对象 overlayView 不会被添加为子视图指向classA,而是指向对象pointer

其次,如果您打印并检查您的 window.bounds 是否返回 (null)。

修改classB中的类方法

+ (void)makeViewOnParentView:(id)sender;

+ (void)makeViewOnParentView:(id)sender
{        
        ViewController *pointer = (ViewController*)sender;
        //UIWindow *window = pointer.view.window;
        CGRect rect=pointer.view.frame;

        classB *overlayView = [[classB alloc] initWithFrame:CGRectMake(0, 0,rect.size.width, rect.size.height)];
        overlayView.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.5f];
        overlayView.userInteractionEnabled = YES;

        [pointer.view addSubview:overlayView];
}

然后在你的 classA 中调用方法

[classB makeViewOnParentView:self];

希望这对你有用...

【讨论】:

  • 它对我有帮助!我误解了使用指针,并且缺乏发件人想法的场景。现在似乎是时候再次重写我的项目了!哈哈.. 非常感谢您的回答和您的时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多