UIResponder inputView与inputAccessoryView

看完以后觉得使用还是很方便的.

同时代码中还有UITextField的leftView与rightView示例.




代码:

//
//  main.m
//  ControlDemo
//
//  Created by watsy0007 on 12-6-3.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>

#define BARBUTTONITEM(title,act) [[[UIBarButtonItem alloc] initWithTitle:title \
style:UIBarButtonItemStylePlain \
target:self \
action:act] autorelease];

@interface KeyboardAccessoryView : UIView <UIInputViewAudioFeedback> {
}

@end

@implementation KeyboardAccessoryView

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

- (void) playClickForCustomKeyTap {
    [[UIDevice currentDevice] playInputClick];
}

@end

//--------------------------------------------------------------------------------------------
#pragma mark -
#pragma mark ViewController()

@interface ViewController : UIViewController <UITextFieldDelegate,UIWebViewDelegate> {
    UITextField     *_txtField;
    UIWebView       *_webView;
}

@property (nonatomic,retain) UIView *inView;

@end


@implementation ViewController

@synthesize inView;

- (void) dealloc {
    [_txtField release];
    if ([_webView isLoading]) {
        [_webView stopLoading];
        [_webView release];
    }
    [super dealloc];
}

- (void) inputOrAccessory: (id) sender {
    if (_txtField.inputView == nil) {
        _txtField.inputView = [self inView];
        _txtField.inputAccessoryView = nil;
    } else {
        _txtField.inputView = nil;
        _txtField.inputAccessoryView = [self inView];
    }
    
    [_txtField reloadInputViews];
    
    if ([_txtField isFirstResponder]) {
        [_txtField resignFirstResponder];
        [_txtField becomeFirstResponder];
    }
}

- (void) viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = @"demo";
    
    self.navigationItem.rightBarButtonItem = BARBUTTONITEM(@"input/Accessory", @selector(inputOrAccessory:));
    
    _txtField = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 300, 35)];
    _txtField.delegate = self;
    _txtField.borderStyle = UITextBorderStyleRoundedRect;
    [self.view addSubview:_txtField];
    
    _webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 65, 300, 400)];
    [self.view addSubview:_webView];
    [_webView setDelegate:self];
    
    [_webView loadHTMLString:@"<input type=\"text\" size=\"30\" autocorrect=\"off\" autocapitalization=\"on\">default keyboard</input><br><input type=\"tel\">tel keyboard</input>" baseURL:nil];
    
    
    _txtField.inputView = [self inAView];
}

- (void) completeCurrentWord:(id) sender {
    [[UIDevice currentDevice] playInputClick];
}

- (UIView *)inAView {
    if (!inView) {
        CGRect accessFrame = CGRectMake(0.0, 0.0, 320.0, 50.0);
        inView = [[KeyboardAccessoryView alloc] initWithFrame:accessFrame];
        inView.backgroundColor = [UIColor blueColor];
        UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        compButton.frame = CGRectMake(80, 10.0, 160, 30.0);
        [compButton setTitle: @"watsy0007" forState:UIControlStateNormal];
        [compButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [compButton addTarget:self action:@selector(completeCurrentWord:)
             forControlEvents:UIControlEventTouchUpInside];
        [inView addSubview:compButton];
    }
    return inView;
}

- (void) viewDidUnload {
    if ([_webView isLoading]) {
        [_webView stopLoading];
        [_webView release];
    }
    [super viewDidUnload];
}
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

- (void) showWeb:(id) sender {
    [_txtField resignFirstResponder];
    NSString *sURL = nil;
    if (![_txtField.text hasPrefix:@"http://"]) {
        sURL = [NSString stringWithFormat:@"http://%@",_txtField.text];
    } else {
        sURL = _txtField.text;
    }
    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:sURL]]];
}

#pragma mark -
#pragma mark field delegate
- (void) textFieldDidBeginEditing:(UITextField *)textField {
    if (textField == _txtField) {
        UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 45, 21)];    
        lbl.backgroundColor = [UIColor clearColor];
        lbl.textColor = [UIColor lightGrayColor];
        lbl.text = @"url:";
        
        textField.borderStyle = UITextBorderStyleRoundedRect;
        textField.leftViewMode = UITextFieldViewModeAlways;    
        textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        textField.leftView = lbl;
        [lbl release];
        
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
        [button setTitle:@"Go" forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        textField.rightView = button;
        [button addTarget:self action:@selector(showWeb:) forControlEvents:UIControlEventTouchUpInside];
        textField.rightViewMode = UITextFieldViewModeAlways;
        [button release];
    }
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    
    if (textField == _txtField) {
        textField.leftView = nil;
        textField.rightView = nil;
    }
    // remainder of implementation....
}

#pragma mark -
#pragma mark web view delegate
- (void) webViewDidFinishLoad:(UIWebView *)webView {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void) webViewDidStartLoad:(UIWebView *)webView {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"error :%@",error);
}

@end


//-----------------------------------------------------------------------------------------------------

#pragma mark -
#pragma mark AppDelegate
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController *viewController;

@end

@implementation AppDelegate

@synthesize window = _window;
@synthesize viewController = _viewController;

- (void) dealloc {
    [_window release];
    [_viewController release];
    
    [super dealloc];
}

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    srand(time(NULL));
    
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
    self.viewController = [[ViewController alloc] init];
    
    UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
    self.window.rootViewController = controller;
    [controller release];
    
    [self.window makeKeyAndVisible];
    return YES;
}

@end

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值