gpt4 book ai didi

ios - 在 Objective-C 中如何从父类(super class)中引用子类的 View ?

转载 作者:行者123 更新时间:2023-11-29 01:14:54 25 4
gpt4 key购买 nike

所以我有几个不同的 View Controller ,我想在上面显示登录屏幕,它们只是模糊屏幕上的一个简单文本框。因此,我认为最好的想法是创建一个名为 Login 的父类(super class),所有不同的 View Controller 都可以使用。这是 Login.h 的代码:

#import <UIKit/UIKit.h>

@interface Login : UIViewController

@property (strong, nonatomic) UIVisualEffectView *blurEffectView;
@property (strong, nonatomic) UITextField *pass;

- (void) enter;

@end

登录.m:

#import "Login.h"

@interface Login () {
NSString *password;
}


@end

@implementation Login

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"In the Login viewDidLoad");
[self presentLogin];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void) presentLogin {
NSLog(@"Presenting the login screen");

[self.view setBackgroundColor:[UIColor whiteColor]];

self.pass = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
[self.pass setCenter:self.view.center];

[self.view addSubview: self.pass];

[self.pass addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];


if (!UIAccessibilityIsReduceTransparencyEnabled()) {

UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
self.blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
self.blurEffectView.frame = self.view.bounds;
self.blurEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view insertSubview:self.blurEffectView belowSubview:self.pass];
}


}

- (void) textFieldDidChange: (UITextField *) t {
if ([self.pass.text isEqualToString:[NSString stringWithFormat:@"17"]]) {
[self.blurEffectView removeFromSuperview];
[self.pass removeFromSuperview];
[self enter];
}
NSLog(@"You're changing the text.");
}

- (void) enter {
//to implement in the subclasses individually
}

@end

子类(到目前为止我只是想创建一个)除了简单地打印出“登录成功”的“enter”定义之外是空的。运行时我得到的唯一输出是:

In the Login viewDidLoad
Presenting the login screen

屏幕上什么也没有显示:只有白色。我假设这是因为我试图修改子类的 self.view,而不是父类(super class),因为子类是实际呈现的东西。有更好的方法吗?我没有想到的其他一些设计模式?还是有一种简单的方法来解决这个问题?

编辑:我刚刚意识到我正在运行的代码与我在此处粘贴的代码略有不同。我现在更新了它,但只显示模糊,而不显示文本字段。我还意识到我的 CGRect 错误,它应该类似于 CGRectMake(0,0,100,20); 所以我修复了它,文本字段仍然没有显示。是否有可能发生的原因。

最佳答案

设置您的高度宽度,同时将您的背景颜色设置为白色。现在它采用透明 TextView

self.pass = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
[self.pass setCenter:self.view.center];
[self.pass setBackgroundColor:[UIColor whiteColor]]; // default taking clear color for now

关于ios - 在 Objective-C 中如何从父类(super class)中引用子类的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306584/

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