当前位置: 编程技术>移动开发
本页文章导读:
▪NSData 读取此中一部分数据 NSData 读取其中一部分数据
NSData *data1 = [data0 subdataWithRange:NSMakeRange(200, 500)];
......
▪ UITextField+小结(zhuan) UITextField+总结(zhuan)
1.UITextField的初始化和设置1textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];2[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型3textField.placeholder = .........
▪ 进度条的应用 ProgressBar类 进度条的使用 ProgressBar类
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
.........
[1]NSData 读取此中一部分数据
来源: 互联网 发布时间: 2014-02-18
NSData 读取其中一部分数据
NSData *data1 = [data0 subdataWithRange:NSMakeRange(200, 500)];
[2] UITextField+小结(zhuan)
来源: 互联网 发布时间: 2014-02-18
UITextField+总结(zhuan)
1.UITextField的初始化和设置
1
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
2
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
3
textField.placeholder = @"password"; //默认显示的字
4
textField.secureTextEntry = YES; //密码
5
textField.autocorrectionType = UITextAutocorrectionTypeNo;
6
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
7
textField.returnKeyType = UIReturnKeyDone;
8
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
9
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
view sourceprint?
1
- (BOOL)textFieldShouldReturn:(UITextField *)textField
2
{
3
[self.textField resignFirstResponder];
4
return YES;
5
}
最右侧加图片是以下代码,
UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=imgv;
text.rightViewMode = UITextFieldViewModeAlways;
如果是在最左侧加图片就换成:
text.leftView=imgv;
text.leftViewMode = UITextFieldViewModeAlways;
UITextField 继承自 UIControl,此类中有一个属性contentVerticalAlignment
所以想让UITextField里面的text垂直居中可以这样写:
text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
查看函数的方法:
按住command键双击进入函数声明
按住alt键双击进入doc文档
///////////////////////////////////////////////////////////////
文本框常用方法:
如何用程序删除文本框中选中的文本
[textView delete: nil];
///////////////////////////////////////////////////////////////
如何限制文本框只能输入数字:
建立NSNumberFormatter的子类,增加这个方法,将formatter链接至文本框。
- (BOOL) isPartialStringValid: (NSString **) partialStringPtr
proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
originalString: (NSString *) origString
originalSelectedRange: (NSRange) origSelRange
errorDescription: (NSString **) error
{
NSCharacterSet *nonDigits;
NSRange newStuff;
NSString *newStuffString;
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
newStuff = NSMakeRange(origSelRange.location,
proposedSelRangePtr->location
- origSelRange.location);
newStuffString = [*partialStringPtr substringWithRange: newStuff];
if ([newStuffString rangeOfCharacterFromSet: nonDigits
options: NSLiteralSearch].location != NSNotFound) {
*error = @"不是数字";
return (NO);
} else {
*error = nil;
return (YES);
}
}
///////////////////////////////////////////////////////////////
从文本框获取十六进制数据的代码
char singleNumberString[3] = {'\0','\0','\0'};
uint32_t singleNumber = 0;
uint32_t i = 0;
NSMutableData *data = [NSMutableData data];
//从文本框获取到得数据
const char *buf = [[_hexToSendTextField text] UTF8String];
//转换为十六进制
for(i = 0; i < strlen(buf); i+=2)
{
if(((i+1) < len && isxdigit(buf) && (isxdigit(buf[i+1])))
{
singleNumberString[0] = buf;
singleNumberString[1] = buf[i+1];
sscanf(singleNumberString, "%x", &singleNumber);
[data appendBytes:(void*)(&tmp) length:1];
}
else
{
break;
}
}
//输出
NSLog(@"%@", data);
/////////////////////////////////////////////////////////////
点击 UITextView 输入文字,光标都从最初点开始
- (void)textViewDidChangeSelection:(UITextView *)textView
{
NSRange range;
range.location = 0;
range.length = 0;
textView.selectedRange = range;
}
///////////////////////////////////////////////////////////
软键盘
在登录页面要实现用户名和密码,密码要是点点格式,引入当前页面光标要停留在用户名选项,软键盘要弹出界面。如下图:
弹出键盘:
[username becomeFirstResponder];
取消键盘:
[username resignFirstResponder];
密码保护:
password.secureTextEntry=YES;
//////////////////////////////////////////////////////////////////
1.UITextField的初始化和设置
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
textField.placeholder = @"password"; //默认显示的字
textField.secureTextEntry = YES; //密码
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
3. 可以在UITextField使用下面方法,按return键返回
-(IBAction) textFieldDone:(id) sender
{
[textFieldName resignFirstResponder];
}
链接TextField控件的"Did end on exit"
////////////////////////////////////////////////////////////////////
限制输入文本的长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location >= MAX_LENGTH)
return NO; // return NO to not change text
return YES;
}
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text length] > MAXLENGTH)
{
textField.text = [textField.text substringToIndex:MAXLENGTH-1];
return NO;
}
return YES;
}
//////////////////////////////////////////////////////////////////////
使用UITextFieldDelegate来隐藏键盘
在iPhone界面上,时常会需要当用户输入完内容后,隐藏键盘。 当然有很多方法,今天只介绍使用UITextFieldDelegate这个协议实现隐藏键盘。
其实很简单, 需要三步:
1. 在你的控制器类中,加入UITextFieldDelegate这个协议
如:@interface AddItemViewController : UIViewController <UITextFieldDelegate>
2. 在使用了UITextFieldDelegate协议的控制器类的实现中,加入- (BOOL)textFieldShouldReturn:方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
//设置焦点:
[UITextField becomeFirstResponder];
3. 将xib文件中的TextField控件的delegate变量指向到之前使用UITextFieldDelegate协议的那个控制器类,将 TextField的delegate IBOutlet变量右键链接到前面的控制器类的实例上。或者使用代码方式,指定相关TextField的delegate变量。
- (void)viewDidLoad
{
[super viewDidLoad];
itemNameField.delegate = self;
priceField.delegate = self;
}
1.UITextField的初始化和设置
1
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
2
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
3
textField.placeholder = @"password"; //默认显示的字
4
textField.secureTextEntry = YES; //密码
5
textField.autocorrectionType = UITextAutocorrectionTypeNo;
6
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
7
textField.returnKeyType = UIReturnKeyDone;
8
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
9
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
view sourceprint?
1
- (BOOL)textFieldShouldReturn:(UITextField *)textField
2
{
3
[self.textField resignFirstResponder];
4
return YES;
5
}
最右侧加图片是以下代码,
UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=imgv;
text.rightViewMode = UITextFieldViewModeAlways;
如果是在最左侧加图片就换成:
text.leftView=imgv;
text.leftViewMode = UITextFieldViewModeAlways;
UITextField 继承自 UIControl,此类中有一个属性contentVerticalAlignment
所以想让UITextField里面的text垂直居中可以这样写:
text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
查看函数的方法:
按住command键双击进入函数声明
按住alt键双击进入doc文档
///////////////////////////////////////////////////////////////
文本框常用方法:
如何用程序删除文本框中选中的文本
[textView delete: nil];
///////////////////////////////////////////////////////////////
如何限制文本框只能输入数字:
建立NSNumberFormatter的子类,增加这个方法,将formatter链接至文本框。
- (BOOL) isPartialStringValid: (NSString **) partialStringPtr
proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
originalString: (NSString *) origString
originalSelectedRange: (NSRange) origSelRange
errorDescription: (NSString **) error
{
NSCharacterSet *nonDigits;
NSRange newStuff;
NSString *newStuffString;
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
newStuff = NSMakeRange(origSelRange.location,
proposedSelRangePtr->location
- origSelRange.location);
newStuffString = [*partialStringPtr substringWithRange: newStuff];
if ([newStuffString rangeOfCharacterFromSet: nonDigits
options: NSLiteralSearch].location != NSNotFound) {
*error = @"不是数字";
return (NO);
} else {
*error = nil;
return (YES);
}
}
///////////////////////////////////////////////////////////////
从文本框获取十六进制数据的代码
char singleNumberString[3] = {'\0','\0','\0'};
uint32_t singleNumber = 0;
uint32_t i = 0;
NSMutableData *data = [NSMutableData data];
//从文本框获取到得数据
const char *buf = [[_hexToSendTextField text] UTF8String];
//转换为十六进制
for(i = 0; i < strlen(buf); i+=2)
{
if(((i+1) < len && isxdigit(buf) && (isxdigit(buf[i+1])))
{
singleNumberString[0] = buf;
singleNumberString[1] = buf[i+1];
sscanf(singleNumberString, "%x", &singleNumber);
[data appendBytes:(void*)(&tmp) length:1];
}
else
{
break;
}
}
//输出
NSLog(@"%@", data);
/////////////////////////////////////////////////////////////
点击 UITextView 输入文字,光标都从最初点开始
- (void)textViewDidChangeSelection:(UITextView *)textView
{
NSRange range;
range.location = 0;
range.length = 0;
textView.selectedRange = range;
}
///////////////////////////////////////////////////////////
软键盘
在登录页面要实现用户名和密码,密码要是点点格式,引入当前页面光标要停留在用户名选项,软键盘要弹出界面。如下图:
弹出键盘:
[username becomeFirstResponder];
取消键盘:
[username resignFirstResponder];
密码保护:
password.secureTextEntry=YES;
//////////////////////////////////////////////////////////////////
1.UITextField的初始化和设置
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
textField.placeholder = @"password"; //默认显示的字
textField.secureTextEntry = YES; //密码
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
3. 可以在UITextField使用下面方法,按return键返回
-(IBAction) textFieldDone:(id) sender
{
[textFieldName resignFirstResponder];
}
链接TextField控件的"Did end on exit"
////////////////////////////////////////////////////////////////////
限制输入文本的长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location >= MAX_LENGTH)
return NO; // return NO to not change text
return YES;
}
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text length] > MAXLENGTH)
{
textField.text = [textField.text substringToIndex:MAXLENGTH-1];
return NO;
}
return YES;
}
//////////////////////////////////////////////////////////////////////
使用UITextFieldDelegate来隐藏键盘
在iPhone界面上,时常会需要当用户输入完内容后,隐藏键盘。 当然有很多方法,今天只介绍使用UITextFieldDelegate这个协议实现隐藏键盘。
其实很简单, 需要三步:
1. 在你的控制器类中,加入UITextFieldDelegate这个协议
如:@interface AddItemViewController : UIViewController <UITextFieldDelegate>
2. 在使用了UITextFieldDelegate协议的控制器类的实现中,加入- (BOOL)textFieldShouldReturn:方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
//设置焦点:
[UITextField becomeFirstResponder];
3. 将xib文件中的TextField控件的delegate变量指向到之前使用UITextFieldDelegate协议的那个控制器类,将 TextField的delegate IBOutlet变量右键链接到前面的控制器类的实例上。或者使用代码方式,指定相关TextField的delegate变量。
- (void)viewDidLoad
{
[super viewDidLoad];
itemNameField.delegate = self;
priceField.delegate = self;
}
[3] 进度条的应用 ProgressBar类
来源: 互联网 发布时间: 2014-02-18
进度条的使用 ProgressBar类
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ProgressBar android:id="@+id/ProgressBar01" android:layout_width="200dp" android:layout_height="wrap_content" android:visibility="gone" ></ProgressBar> <ProgressBar android:id="@+id/ProgressBar02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="100" android:progress="50" android:secondaryProgress="70" android:visibility="gone" ></ProgressBar> <Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始" ></Button> </LinearLayout> 代码: package yt.hy.progressbar; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.ProgressBar; public class ProgressBarActivity extends Activity { private ProgressBar m_ProgressBar01; private ProgressBar m_ProgressBar02; private Button mbutton01; protected static final int GUI_STOP_NOTIFIER = 0x108; protected static final int GUI_THREADING_NOTIFIER = 0x109; public int intCounter = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置窗口模式,因为需要显示进度条在标题栏 requestWindowFeature(Window.FEATURE_PROGRESS); // 设置显示进度条 this.setProgressBarVisibility(true); setContentView(R.layout.main); // 取得ProgressBar m_ProgressBar01 = (ProgressBar)findViewById(R.id.ProgressBar01); m_ProgressBar02 = (ProgressBar)findViewById(R.id.ProgressBar02); mbutton01 = (Button)findViewById(R.id.Button01); *Change the indeterminate mode for this progress bar. In indeterminate mode, the progress is ignored and the progress bar shows an infinite animation instead. If this progress bar's style only supports indeterminate mode (such as the circular progress bars), then this will be ignored.*/ m_ProgressBar01.setIndeterminate(true); m_ProgressBar02.setIndeterminate(false); mbutton01.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // 设置为可见状态 m_ProgressBar01.setVisibility(View.VISIBLE); m_ProgressBar02.setVisibility(View.VISIBLE); // 设置ProgressBar的最大值 m_ProgressBar01.setMax(100); //设置当前值 m_ProgressBar01.setProgress(0); m_ProgressBar02.setProgress(0); // 通过线程改变ProgressBar的值 new Thread(new Runnable() { @Override public void run() { for (int i=0; i<10; i++) { try { intCounter = (i+1) * 20; Thread.sleep(1000); if (i == 4) { Message m = new Message(); m.what = ProgressBarActivity.GUI_STOP_NOTIFIER; // 给Handler发送消息 ProgressBarActivity.this.myMessageHandler.sendMessage(m); break; } else { Message m = new Message(); m.what = ProgressBarActivity.GUI_THREADING_NOTIFIER; // 给Handler发送消息 ProgressBarActivity.this.myMessageHandler.sendMessage(m); } } catch(Exception e) { e.printStackTrace(); } } } }).start(); } }); } Handler myMessageHandler = new Handler() { // 重写接收信息的方法 public void handleMessage(Message msg) { switch (msg.what) { // 进度已满 case GUI_STOP_NOTIFIER : m_ProgressBar01.setVisibility(View.GONE); m_ProgressBar02.setVisibility(View.GONE); // 打断线程 Thread.currentThread().interrupt(); break; case GUI_THREADING_NOTIFIER : if (!Thread.currentThread().isInterrupted()) { // 改变ProgressBar的当前值 m_ProgressBar01.setProgress(intCounter); m_ProgressBar02.setProgress(intCounter); // 设置标题栏中前景的进度条的进度值 setProgress(intCounter*100); // 设置标题栏中后景的进度条的进度值 setSecondaryProgress(intCounter*100 + 10*100); } break; } super.handleMessage(msg); } }; }
设置进度条类型
android:visibility="gone"设置进度条不显示,用的时候再显示
android:progress="50"默认进度
android:secondaryProgress="70"底层的进度
m_ProgressBar01.setIndeterminate(false);
默认值为 false。将此值设置为 true 可在进度条上呈现进度的文本显示。
设置进度条的 indeterminate 属性,该属性确定进度条处于确定模式中还是处于不确定模式中。
不确定进度条连续地显示动画,指示发生未知长度的操作。默认情况下,此属性为 false。有些外观
可能不支持不确定进度条;它们将忽略此属性。 (也就是循序渐进的和跳进的模式)
<!--EndFragment-->最新技术文章: