1. 如何实现对UITextField ,UITextView等输入框的 字数限制
(1)首先,肯定要 让controller 实现 UITextFieldDelegate (针对UITextField)或者 UITextViewDelegate(针对UITextView)
然后,将 输入框的delegate属性设置为self.
(2) 然后,我们就可以用这两个delegate的函数来实现 我们对输入字数的限制了。
对于 UITextField 是函数
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
或者
对于UITextView 是函数
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
如果允许继续输入,那么返回YES,否则返回NO。
代码如下:
//如果输入超过规定的字数100,就不再让输入 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (range.location>=100) { return NO; } else { return YES; } }
2. 如何实现 对有输入限制的输入框的剩余字数的自动计算
比如上面的代码中,输入框的字数不能超过100,如何实时的计算出当前可以输入多少个字符呢?
UITextField 没有找到合适的函数,也可以在函数
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
中来实现。
代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { int remainTextNum_=100; //计算剩下多少文字可以输入 if(range.location>=100) { remainTextNum_=0; return NO; } else { NSString * nsTextContent=string.text; int existTextNum=[nsTextContent length]; remainTextNum_=100-existTextNum; return YES; } }
UITextView 除了可以在函数
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
中按照上面类似的办法处理以外,还可以在函数
- (void)textViewDidChange:(UITextView *)textView 中处理。
代码如下:
//在这个地方计算输入的字数 - (void)textViewDidChange:(UITextView *)textView { NSString * nsTextContent=textView.text; int existTextNum=[nsTextContent length]; remainTextNum_=100-existTextNum; }
转至:http://www.devdiv.com/home.php?mod=space&uid=21083&do=blog&id=4122
xaml页面
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox
HorizontalAlignment="Left"
Margin="12,6,0,0"
Name="listBox1"
VerticalAlignment="Top"
>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="100" Height="100"
Source="{Binding soure}" />
<TextBlock Text="{Binding text}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
cs 页面
public partial class ListBox_eg : PhoneApplicationPage
{
//一个类用于 保存数据的
public class Item
{
public ImageSource soure { get; set; }
public string text { get; set; }
}
//构造函数
public ListBox_eg()
{
InitializeComponent();
//委托事件 当listbox选中改变的时候触发
listBox1.SelectionChanged += new SelectionChangedEventHandler(listBox1_SelectionChanged);
}
//加载
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
//声明一个集合
List<Item> items = new List<Item>();
//实例化一个类 然后把数据通过类加到集合中的
Item t = new Item();
t.soure = new BitmapImage(new Uri("/Image/1.jpg",UriKind.Relative));
t.text = "1.jpg";
items.Add(t);
t = new Item();
t.soure = new BitmapImage(new Uri("/Image/2.jpg", UriKind.Relative));
t.text = "2.jpg";
items.Add(t);
t = new Item();
t.soure = new BitmapImage(new Uri("/Image/3.jpg", UriKind.Relative));
t.text = "3.jpg";
items.Add(t);
//把集合赋值到listbox集合中
listBox1.ItemsSource = items;
}
//获取选中改变事件
void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//获取当前被选中的对象 然后进行操作
ListBox lb = sender as ListBox;
Item item = lb.SelectedItem as Item;
this.PageTitle.Text = item.text;
}
}
页面中的checkbox是挺大的,我们通过设置width,height是改不了的,我们要进行变形才能改变的,下面就是xaml页面
<CheckBox Content="CheckBox" Height="72" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" Loaded="checkBox1_Loaded" HorizontalAlignment="Left" Margin="111,103,0,0" Name="checkBox1" VerticalAlignment="Top" >
<CheckBox.RenderTransform>
<ScaleTransform ScaleX="0.7" ScaleY="0.7"></ScaleTransform>
</CheckBox.RenderTransform>
</CheckBox>