自定义视图

实现一个功能,不是难事。写出高质量的代码却不是任何程序员都能做到的事。

高质量代码特点:可复用,可移植,精炼等

自定义视图:系统标准UI之外,⼰己组合而出的新的视图。
iOS提供了很多UI组件,借助它们,我们可以做各种程序。
尽管如此,实际开发中,我们还需自定义视图.积累自己的代码库.方便开发.自己封装的视图,能像系统UI控件一样,用于别的项目中,能大大降低开发成本,提高开发效率

自定义视图步骤
根据需求的不同,自定义视图继承的类也有所不同。一般自定义的视图会继承于UIView。以下是自定义视图的要点:
1、创建一个UIView⼦子类
2、在类的初始化方法中添加子视图
3、类的.h文件提供一些接口(方法),便于外界操作子视图

#import "AppDelegate.h"
#import "LTView.h"
// 可以在.m文件中引头文件,签协议
@interface AppDelegate ()<UIAlertViewDelegate>

@property(nonatomic, retain)UIAlertView *alertView;

@end

@implementation AppDelegate

- (void)dealloc
{
    [self.window release];
    [self.alertView release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    [self.window release];

    // alert 提示 提醒 警告 注意
    self.alertView.delegate = self;
    self.alertView = [[UIAlertView alloc] initWithTitle:@"皇城PK" message:@"怒刷装备" delegate:self cancelButtonTitle:@"注册即送" otherButtonTitles:@"残忍拒绝", nil];
    [self.alertView show];

    // 让alertView中出现textField
//    self.alertView.alertViewStyle =  UIAlertViewStyleLoginAndPasswordInput; // Login and Password
    self.alertView.alertViewStyle =     UIAlertViewStyleSecureTextInput;    // Password
//    self.alertView.alertViewStyle = UIAlertViewStylePlainTextInput;     // Space

    LTView *view = [[LTView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, self.window.frame.size.height)];
    [self.window addSubview:view];
    [view release];
    return YES;
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"我打~");
    // 先找到alertView中的textField
    UITextField *first = [self.alertView textFieldAtIndex:0];
    NSLog(@"%@", first.text);
}

@end
#import 

@interface LTView : UIView<UITextFieldDelegate>

// 因为要在类的外面获取输入框的内容并修改Label的标题,所以把这两部分属性写在.h文件中
@property(nonatomic, retain)UILabel *MyLaber;

@property(nonatomic, retain)UITextField *MyTextField;

@end
#import "LTView.h"

@implementation LTView

// 重写默认的初始化方法
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // 模块化
        [self createView1];
        [self createView2];
    }

    return self;
}

- (void)createView1
{
    // 创建两个子视图,一个是label,一个是textField
    self.MyLaber = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 100, 40)];
    self.MyLaber.backgroundColor = [UIColor orangeColor];
    self.MyTextField = [[UITextField alloc] initWithFrame:CGRectMake(180, 100, 180, 40)];
    self.MyTextField.backgroundColor = [UIColor cyanColor];
    self.MyTextField.delegate = self;
    [self addSubview:self.MyLaber];
    [self addSubview:self.MyTextField];
    [self.MyLaber release];
    [self.MyTextField release];
    self.MyLaber.text = @"用户名";
    self.MyTextField.placeholder = @"请输入您的用户名";
}

- (void)createView2
{
    self.MyLaber = [[UILabel alloc] initWithFrame:CGRectMake(50, 160, 100, 40)];
    self.MyLaber.backgroundColor = [UIColor yellowColor];
    [self addSubview:self.MyLaber];
    [self.MyLaber release];
    self.MyTextField = [[UITextField alloc] initWithFrame:CGRectMake(180, 160, 180, 40)];
    self.MyTextField.backgroundColor = [UIColor blueColor];
    [self addSubview:self.MyTextField];
    [self.MyTextField release];
    self.MyLaber.text = @"密码";
    self.MyTextField.placeholder = @"请输入您的密码";
}

- (void)dealloc
{
    [self.MyTextField release];
    [self.MyLaber release];
    [super dealloc];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

@end

你可能感兴趣的:(UI)