#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITextFieldDelegate>{
UIScrollView * _scrollView;
IBOutlet UITextField *message;
IBOutlet UIScrollView *myScrollView;
}
@property (retain, nonatomic) IBOutlet UITextField *message;
@property (retain, nonatomic) IBOutlet UIScrollView *myScrollView;
@end
//
// ViewController.m
// ChatRoom007
//
// Created by Bo Xiu on 12-9-14.
// Copyright (c) 2012年 Bo Xiu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize myScrollView;
@synthesize message;
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *myView = [self bubbleView:@"hello" from:NO];
[self.view addSubview:myView];
message.delegate = self;
}
//该方法为点击输入文本框要开始输入是调用的代理方法:就是把view上移到能看见文本框的地方
- (void)textFieldDidBeginEditing:(UITextField *)textField{
CGFloat keyboardHeight = 216.0f;
if (self.view.frame.size.height - keyboardHeight <= textField.frame.origin.y + textField.frame.size.height) {
CGFloat y = textField.frame.origin.y - (self.view.frame.size.height - keyboardHeight - textField.frame.size.height - 5);
[UIView beginAnimations:@"srcollView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.275f];
self.view.frame = CGRectMake(self.view.frame.origin.x, -y, self.view.frame.size.width, self.view.frame.size.height);
[UIView commitAnimations];
}
}
//该方法为点击虚拟键盘Return,要调用的代理方法:隐藏虚拟键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
//该方法为完成输入后要调用的代理方法:虚拟键盘隐藏后,要恢复到之前的文本框地方
- (void)textFieldDidEndEditing:(UITextField *)textField{
[UIView beginAnimations:@"srcollView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.275f];
self.view.frame = CGRectMake(self.view.frame.origin.x, 0, self.view.frame.size.width, self.view.frame.size.height);
[UIView commitAnimations];
}
#pragma mark Table view methods
- (UIView *)bubbleView:(NSString *)text from:(BOOL)fromSelf {
// build single chat bubble cell with given text
UIView *returnView = [[UIView alloc] initWithFrame:CGRectZero];
returnView.backgroundColor = [UIColor clearColor];
UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fromSelf?@"bubbleSelf":@"bubble" ofType:@"png"]];
UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:21 topCapHeight:14]];
UIFont *font = [UIFont systemFontOfSize:12];
CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(150.0f, 1000.0f) lineBreakMode:UILineBreakModeCharacterWrap];
UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(21.0f, 14.0f, size.width+10, size.height+10)];
bubbleText.backgroundColor = [UIColor clearColor];
bubbleText.font = font;
bubbleText.numberOfLines = 0;
bubbleText.lineBreakMode = UILineBreakModeCharacterWrap;
bubbleText.text = text;
bubbleImageView.frame = CGRectMake(0.0f, 0.0f, 200.0f, size.height+40.0f);
if(fromSelf)
returnView.frame = CGRectMake(120.0f, 10.0f, 200.0f, size.height+50.0f);
else
returnView.frame = CGRectMake(0.0f, 10.0f, 200.0f, size.height+50.0f);
[returnView addSubview:bubbleImageView];
[bubbleImageView release];
[returnView addSubview:bubbleText];
[bubbleText release];
return [returnView autorelease];
}
- (void)viewDidUnload
{
[message release];
message = nil;
[myScrollView release];
myScrollView = nil;
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
- (void)dealloc {
[message release];
[myScrollView release];
[super dealloc];
}
@end
分享到:
相关推荐
总的来说,自定义键盘在iOS应用开发中是一种强大的工具,可以提升应用的个性化和用户体验。通过理解并实践上述步骤,开发者能够为自己的应用打造出独一无二的输入交互方式,使用户在使用过程中感受到更多便利和乐趣...
在这个类中,你需要设计并布局键盘的各个元素,包括按钮、文本框等。 - 在Xcode中,使用Interface Builder或代码创建视图,并将其添加到UIInputView子类中。记得设置好约束,确保键盘在不同屏幕尺寸下都能正确显示...
总之,处理键盘遮挡文本框的问题是iOS开发中不可或缺的一部分,通过合理使用Auto Layout、键盘通知、ScrollView等工具,可以有效提升应用的用户体验。同时,不断学习和实践,结合开源库和社区资源,有助于开发者更好...
在iOS开发中,自定义表情输入和显示是一个常见的需求,特别是在社交、聊天或者游戏应用中。这个名为"ios-自定义表情输入 显示 ...通过学习和理解这个项目,开发者可以掌握构建类似功能的方法,提升iOS应用的用户体验。
总结来说,自定义软键盘在iOS开发中是一种提升用户体验的有效手段。通过`UIInputView`和`UIKeyInput`,我们可以构建出功能完备且符合应用需求的键盘,同时支持字母、数字和符号等多种输入方式。记得在实际项目中,...
2. **设计键盘界面**:使用AutoLayout来布局键盘上的各个元素,如文本框、表情按钮等。可以使用Storyboard或者纯代码进行布局。确保所有元素的尺寸和位置在不同设备上都能正确显示。 3. **实现表情功能**:表情功能...
在iOS中,键盘弹出时可能会遮挡文本框,影响用户查看和输入。为了优化用户体验,开发者可以使用键盘通知来控制键盘的行为。例如,当键盘出现时,可以通过调整视图控制器的布局或者使用`UIScrollView`来上移内容,...
为了确保自定义输入视图随键盘一起显示和隐藏,我们需要监听键盘的通知。例如,我们可以添加`UIKeyboardWillShowNotification`和`UIKeyboardWillHideNotification`通知,并相应地调整视图的布局。 4. 适配不同设备...
在iOS应用开发中,自定义数字键盘是一种常见的需求,特别是在金融、计算器或者密码输入等场景。...通过深入理解源码,开发者不仅可以掌握自定义键盘的实现方式,还能进一步提升iOS应用的用户体验。
本项目“ios-自定义车牌号选择键盘.zip”正是针对这一需求,提供了一个自定义的键盘视图,使得用户在输入车牌号时能够方便地选取数字和字母,提升用户体验。虽然描述中提到“暂未实现实时回调”,这意味着在当前版本...
本文将详细讲解如何在iOS开发中取消文本框输入时自动弹出的小键盘。 首先,我们需要在Interface Builder中对UITextField进行配置。打开你的故事板(Storyboard)文件,找到你想要取消小键盘显示的UITextField。在...
"仿iPhone软键盘输入文本框"是一个利用jQuery和CSS3技术实现的网页组件,它旨在为用户在桌面浏览器上提供与iPhone硬件键盘类似的输入体验。这个组件对于那些在非移动设备上也需要模拟移动设备输入场景的应用或网站...
- **实时监听**: 实时监听文本框内容改变是这个键盘的另一个强大功能。开发人员可以设置观察者来监听UITextField或UIWebView的文本变化,以便在用户输入时进行相应的操作,例如格式化输入的数字,或者在用户输入...
通过学习和使用KRKeyboard,开发者可以快速地为自己的iOS应用实现一个安全且可定制的键盘,提升应用的专业性和安全性。同时,这个开源项目也为iOS开发者提供了一个研究和学习自定义键盘实现的好例子。
6. **属性设置**:`UITextField`提供了诸如`clearButtonMode`(清除按钮)和`keyboardType`(键盘类型)等属性,可以根据输入类型进行合理设置,辅助用户输入。 在描述中,提到了“红色的提示框”,这通常是指在...
在iOS应用开发中,自定义数字键盘是一种常见的需求,特别是在涉及到支付、密码输入等场景时。Objective-C作为苹果平台的主要编程语言之一,...理解这一过程有助于提升iOS开发中的组件化思维,提高代码复用性和灵活性。
"swift-iOS平台轻量级的键盘管理器使用简单功能强大键盘再也不会挡住输入控件" 这个标题所提及的,就是解决了一个常见的问题:当用户在文本框(UITextField或UITextView)中输入时,弹出的键盘可能会遮挡到输入控件...
在iOS应用开发中,自定义数字键盘是一种常见的需求,它可以让开发者根据具体的应用场景和用户交互设计提供更...通过研究和学习这个例子,开发者可以更好地理解和掌握自定义键盘的实现方式,进一步提升应用的用户体验。
在iOS开发中,为了提供更个性化的用户体验,开发者经常需要自定义特定类型的输入框,例如车牌号输入框。...通过这样的实践,开发者不仅可以提升应用的用户体验,还能深入理解iOS中输入与交互的底层机制。
标题“自定义的View始终位于弹起键盘顶部”所指的问题,是开发者希望在用户触发输入事件,例如点击文本框(UITextField或UITextView)时,自定义的视图能够保持在键盘上方可见,从而提供持续的信息展示或者操作界面...