现在的位置: 首页 > 综合 > 正文

c# 经典小编程实例

2014年06月15日 ⁄ 综合 ⁄ 共 24499字 ⁄ 字号 评论关闭

  2013年8月25日

1.巧用位移运算符获取汉字编码值
本实例实现时主要是利用移位运算符获取汉字编码值,先讲解一下位移运行符的相关概念。

位移运算符分为左位移运算符“<<”和右位移运算符“>>”,分别用于向左和向右执行移位运算。对于X<<N或X>>N形式的运算,含义是将X向左或向右移动N位,X的类型可以是int、uint、long、ulong、bytes、byte、short和ushort。需要注意的是,byte、sbyte、short和ushort类型的值在进行位移操作后值的类型将自动转换成int类型。比如byte类型的1101向左位移4位后为11010000,位移操作后值的为208(自动转换成int类型)。

PS:在进行位移运算时,当数值的二进制数每次向左移1位就相当于乘以2,当数值每次向右移1位就相当于除以2。

获取汉字编码值的实现思路,众所周知,以GB2312标准编码的汉字,每个汉字都是用两个8位二进制字节储存的,我们只需要这两个字节第一个字节向左位移8位后(变成高8位),与第二个字符相加得到汉字编码值(int类型)。

具体实现关键源代码如下:
try
{
char chr = txt_chr.Text[0];//获得一个汉字字符
byte[] gb2312_bt = //使用gb2312编码方式获得字节序列
Encoding.GetEncoding("gb2312").GetBytes(new Char[] { chr });
int n = (int)gb2312_bt[0] << 8;//将字节序列的第一个字节向左移8位
n += (int)gb2312_bt[1];//第一个字节移8位后与第二个字节相加得到汉字编码
txt_Num.Text = n.ToString();//显示汉字编码
}
catch (Exception)
{
MessageBox.Show(//异常提示信息
"请输入汉字字符!", "出现错误!");
}
2.什么是闰年?
公元年数可被4整除为闰年,但是正百的年数必须是可以被400整除的才是闰年。
ushort P_usint_temp;//定义局部变量
if (ushort.TryParse(//将输入字符串转换为数值
txt_year.Text, out P_usint_temp))
{
MessageBox.Show(//输出计算结果
(P_usint_temp % 4 == 0 && P_usint_temp % 100 != 0)//判断是否为闰年
|| P_usint_temp % 400 == 0 ? "输入的是闰年!" : "输入的不是闰年!",
"提示!");
}
else
{
MessageBox.Show(//提示输入数值不正确
"请输入正确数值!", "提示!");
}
3.使用checked关键字处理“溢出”错误
byte bt_One, bt_Two;//定义两个byte类型变量
if (byte.TryParse(//对两个byte类型变量赋值
txt_Add_One.Text, out bt_One)
&& byte.TryParse(txt_Add_Two.Text, out bt_Two))
{
try
{
checked { bt_One += bt_Two; }//使用checke关键字判断是否有溢出
txt_Result.Text = bt_One.ToString();//输出相加后的结果
}
catch (OverflowException ex)
{
MessageBox.Show(ex.Message,"出错!");//输出异常信息
}
}
else
{
MessageBox.Show("请输入255以内的数字!");//输出错误信息
}
4.使用typeof关键字获取类的内部结构
Type type = typeof(System.Int32);//获得int类型的Type对象
foreach (MethodInfo method in type.GetMethods())//遍历string类中定义的所有公共方法
{
rtbox_text.AppendText(
"方法名称:" + method.Name + Environment.NewLine);//输出方法名称
foreach (ParameterInfo parameter in method.GetParameters())//遍历公共方法中所有参数
{
rtbox_text.AppendText(
" 参数:" + parameter.Name + Environment.NewLine);//输出参数名称
}
}
4.商品金额的大小写转换
public string NumToChinese(string x)
{
//数字转换为中文后的数组
string[] P_array_num = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
//为数字位数建立一个位数组
string[] P_array_digit = new string[] { "", "拾", "佰", "仟" };
//为数字单位建立一个单位数组
string[] P_array_units = new string[] { "", "万", "亿", "万亿" };
string P_str_returnValue = ""; //返回值
int finger = 0; //字符位置指针
int P_int_m = x.Length % 4; //取模
int P_int_k = 0;
if (P_int_m > 0)
P_int_k = x.Length / 4 + 1;
else
P_int_k = x.Length / 4;
//外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万,"
for (int i = P_int_k; i > 0; i--)
{
int P_int_L = 4;
if (i == P_int_k && P_int_m != 0)
P_int_L = P_int_m;
//得到一组四位数
string four = x.Substring(finger, P_int_L);
int P_int_l = four.Length;
//内层循环在该组中的每一位数上循环
for (int j = 0; j < P_int_l; j++)
{
//处理组中的每一位数加上所在的位
int n = Convert.ToInt32(four.Substring(j, 1));
if (n == 0)
{
if (j < P_int_l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !P_str_returnValue.EndsWith(P_array_num[n]))
P_str_returnValue += P_array_num[n];
}
else
{
if (!(n == 1 && (P_str_returnValue.EndsWith(P_array_num[0]) | P_str_returnValue.Length == 0) && j == P_int_l - 2))
P_str_returnValue += P_array_num[n];
P_str_returnValue += P_array_digit[P_int_l - j - 1];
}
}
finger += P_int_L;
//每组最后加上一个单位:",万,",",亿," 等
if (i < P_int_k) //如果不是最高位的一组
{
if (Convert.ToInt32(four) != 0)
//如果所有4位不全是0则加上单位",万,",",亿,"等
P_str_returnValue += P_array_units[i - 1];
}
else
{
//处理最高位的一组,最后必须加上单位
P_str_returnValue += P_array_units[i - 1];
}
}
return P_str_returnValue;
}

posted @ 2013-08-25 20:59 蒋晓宇 阅读(5) 评论(0)编辑

  2013年7月17日

判断素数的算法
int j;
j = (int)Math.Ceiling(Math.Sqrt(Convert.ToDouble(textBox1.Text)));//开方
for (int i = 1; i < j; i++)//遍历当前值
{
if (Math.IEEERemainder(Convert.ToDouble(textBox1.Text), i) == 0)//取整
{
label2.Text = "不是素数";
}
else
{
label2.Text = "是素数";
}
}
身份证号从15位升到18位的算法
public string Shen(string id)
{
int[] w = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
char[] a = new char[] { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' }; //设置18位最后一位的值
string newID = "";
if (id.Length == 15) //判断位数
{
int s = 0;
newID = id.Insert(6, "19"); //插入字符串
for (int i = 0; i < 17; i++) //生成前17位
{
int k = Convert.ToInt32(newID[i]) * w[i];
s = s + k;
}
int h = 0;
Math.DivRem(s, 11, out h); //取余数
newID = newID + a[h]; //生成18位
}
return newID;
}
歌德巴赫猜想的算法实现
static bool IsPrimeNumber(int intNum)
{
bool blFlag = true; //标识是否是素数
if (intNum == 1 || intNum == 2) //判断输入的数字是否是1或者2
blFlag = true; //为bool类型变量赋值
else
{
int sqr = Convert.ToInt32(Math.Sqrt(intNum)); //对要判断的数字进行开方运算
for (int i = sqr; i >= 2; i--) //从开方后的数进行循环
{
if (intNum % i == 0) //对要判断的数字和指定数字进行求余运算
{
blFlag = false; //如果余数为0,说明不是素数
}
}
}
return blFlag; //返回bool型变量
}
static bool ISGDBHArith(int intNum)
{
bool blFlag = false; //标识是否符合哥德巴赫猜想
if (intNum % 2 == 0 && intNum > 6) //对要判断的数字进行判断
{
for (int i = 1; i <= intNum / 2; i++)
{
bool bl1 = IsPrimeNumber(i); //判断i是否为素数
bool bl2 = IsPrimeNumber(intNum - i); //判断intNum-i是否为素数
if (bl1 & bl2)
{
//输出等式
Console.WriteLine("{0}={1}+{2}", intNum, i, intNum - i);
blFlag = true; //符合哥德巴赫猜想
}
}
}
return blFlag; //返回bool型变量
}
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
#region 解决八皇后问题
/// <summary>
/// 解决八皇后问题
/// </summary>
/// <param name="size">皇后数量</param>
static void QueenArithmetic(int size)
{
int[] Queen = new int[size];//每行皇后的位置
int y, x, i, j, d, t = 0;
y = 0;
Queen[0] = -1;
while (true)
{
for (x = Queen[y] + 1; x < size; x++)
{
for (i = 0; i < y; i++)
{
j = Queen[i];
d = y - i;
//检查新皇后是否能与以前的皇后相互攻击
if ((j == x) || (j == x - d) || (j == x + d))
break;
}
if (i >= y)
break;//不攻击
}
if (x == size) //没有合适的位置
{
if (0 == y)
{
//回溯到了第一行
Console.WriteLine("Over");
break; //结束
}
//回溯
Queen[y] = -1;
y--;
}
else
{
Queen[y] = x;//确定皇后的位置
y++;//下一个皇后
if (y < size)
Queen[y] = -1;
else
{
//所有的皇后都排完了,输出
Console.WriteLine("\n" + ++t + ':');
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
Console.Write(Queen[i] == j ? 'Q' : '*');
Console.WriteLine();
}
y = size - 1;//回溯
}
}
}
Console.ReadLine();
}
#endregion
百钱百鸡的算法实现
公鸡5元一只,母鸡3元一只,小鸡3只一元,用100元买100只鸡
int a = 0, b = 0, c = 0, p = 0;//定义变量
for (a = 1; a <= 19; a++)//公鸡的百元中的遍历
{
for (b = 1; b <= 33; b++)//母鸡在百元中的遍历
{
c = 100 - a - b;//获取百中除了公鸡和母鸡后,小鸡的总钱数
Math.DivRem(c, 3, out p);//计算小鸡的个数
if (((5 * a + 3 * b + c / 3) == 100) && p == 0)//如果公鸡、母鸡和小鸡的总钱数加起来为100
{
textBox1.Text = a.ToString();//显示公鸡的个数
textBox2.Text = b.ToString();//显示母鸡的个数
textBox3.Text = c.ToString();//显示小鸡的个数
return;
}
}
}
韩信点兵是一道古代数学题,内容是:韩信带兵不足百人,三人一行排列多一个,七人一行排列少两个,五人一行排列正好。
int a = 0, b = 0, c = 0;//定义变量
for (int i = 1; i < 100; i++)//遍历
{
Math.DivRem(i, 3, out a);//3行一列时取余
Math.DivRem(i, 5, out b);//5行一列时取余
Math.DivRem(i, 7, out c);//7行一列时取余
if (a == 1 && b == 0 && c == 5)//如果3种方式的余数符合要求
{
textBox1.Text = i.ToString();//显示人数
return;
}
}
水仙花数的算法是一个三位数,每一位数的立方相加等于该数本身。
int a = 0, b = 0, c = 0;//定义变量
listBox1.Items.Clear();//清空listBox1控件
for (int i = 100; i <= 1000; i++)//遍历所有3位数
{
a = i / 100;//获取3位数中的第一个数
Math.DivRem(i, 100, out b);//获取3位数中的后两位数
b = b / 10;//获取3位数中的第二位数
Math.DivRem(i, 10, out c);//获取3位数中的第3位数
a = a * a * a;//计算第一位数的立方
b = b * b * b;//计算第二位数的立方
c = c * c * c;//计算第3位数的立方
if ((a + b + c) == i)//如果符合水仙花数
listBox1.Items.Add(i.ToString());//显示当前3位数
}
约瑟夫环问题的算法实现
#region 约瑟夫环问题算法
/// <summary>
/// 约瑟夫环问题算法
/// </summary>
/// <param name="total">总人数</param>
/// <param name="start">开始报数的人</param>
/// <param name="alter">要出列的人</param>
/// <returns>返回一个int类型的一维数组</returns>
static int[] Jose(int total, int start, int alter)
{
int j, k = 0;
//intCounts数组存储按出列顺序的数据,以当结果返回
int[] intCounts = new int[total + 1];
//intPers数组存储初始数据
int[] intPers = new int[total + 1];
//对数组intPers赋初值,第一个人序号为0,第二人为1,依此下去
for (int i = 0; i < total; i++)
{
intPers[i] = i;
}
//按出列次序依次存于数组intCounts中
for (int i = total; i >= 2; i--)
{
start = (start + alter - 1) % i;
if (start == 0)
start = i;
intCounts[k] = intPers[start];
k++;
for (j = start + 1; j <= i; j++)
intPers[j - 1] = intPers[j];
}
intCounts[k] = intPers[1];
//结果返回
return intCounts;
}
#endregion
杨辉三角算法
public void yanghui(int value)
{
if (value < 3)
{
Console.WriteLine("请重新输入数组大于3的值!");
}
else
{
int[,] arry = new int[value, value];
Console.WriteLine("数组为:");
for (int i = 0; i < value; i++)
{
string str = "";
str = str.PadLeft(value - i);
Console.Write(str);
for (int j = 0; j <= i; j++)
{
if (i == j || j == 0)
{
arry[i, j] = 1;
}
else
{
arry[i, j] = arry[i - 1, j - 1] + arry[i - 1, j];
}
Console.Write(arry[i, j] + " ");
}
Console.WriteLine();
}
}
}
恺撒密码算法的实现
//获取字符的ASCII码
public int AscII(string str)
{
byte[] array = new byte[1];//创建字节数组
array = System.Text.Encoding.ASCII.GetBytes(str);//为字节数组赋值
int asciicode = (short)(array[0]);//获取字节数组的第一项
return asciicode;//返回字节数组的第一项
}
public string Caesar(string str)//凯撒加密算法的实现
{
char[] c = str.ToCharArray();//创建字符数组
string strCaesar = "";//定义一个变量,用来存储加密后的字符串
for (int i = 0; i < str.Length; i++)//遍历字符串中的每一个字符串
{
string ins = c[i].ToString();//记录遍历到的字符
string outs = "";//定义一个变量,用来记录加密后的字符串
bool isChar = "0123456789abcdefghijklmnopqrstuvwxyz".Contains(ins.ToLower());//判断指定的字符串中是否包含遍历到的字符
bool isToUpperChar = isChar && (ins.ToUpper() == ins);//判断遍历到的字符是否是大写
ins = ins.ToLower();//将遍历到的字符转换为小写
if (isChar)//判断指定的字符串中是否包含遍历到的字符
{
int offset = (AscII(ins) + 5 - AscII("a")) % (AscII("z") - AscII("a") + 1);//获取字符的ASCII码
outs = Convert.ToChar(offset + AscII("a")).ToString();//转换为字符并记录
if (isToUpperChar)//判断是否大写
{
outs = outs.ToUpper();//全部转换为大写
}
}
else
{
outs = ins;//记录遍历的字符
}
strCaesar += outs;//添加到加密字符串中
}
return strCaesar;//返回加密后的字符串
}
static void Main(string[] args)
{
while (true)
{
Console.Write("请输入密码:");
string P_str_Code = Console.ReadLine();//记录要加密的密码
Program program = new Program();//创建Program对象
Console.WriteLine("使用凯撒算法加密后的结果为:" + program.Caesar(P_str_Code));//输出加密后的字符串
}
}

posted @ 2013-07-17 23:19 蒋晓宇 阅读(14) 评论(0)编辑

1.选择排序法对一维数组进行排序
if (G_int_value != null)
{
int min;//定义一个int变量,用来存储数组下标
for (int i = 0; i < G_int_value.Length - 1; i++)//循环访问数组中的元素值(除最后一个)
{
min = i;//为定义的数组下标赋值
for (int j = i + 1; j < G_int_value.Length; j++)//循环访问数组中的元素值(除第一个)
{
if (G_int_value[j] < G_int_value[min])//判断相邻两个元素值的大小
min = j;
}
int t = G_int_value[min];//定义一个int变量,用来存储比较大的数组元素值
G_int_value[min] = G_int_value[i];//将小的数组元素值移动到前一位
G_int_value[i] = t;//将int变量中存储的较大的数组元素值向后移
}
txt_str2.Clear();//清空控件内字符串
foreach (int i in G_int_value)//遍历字符串集合
{
txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
}
}
else
{
MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
}
2.冒泡排序法对一维数组进行排序
if (G_int_value != null)
{
//定义两个int类型的变量,分别用来表示数组下标和存储新的数组元素
int j, temp;
for (int i = 0; i < G_int_value.Length - 1; i++)//根据数组下标的值遍历数组元素
{
j = i + 1;
id://定义一个标识,以便从这里开始执行语句
if (G_int_value[i] > G_int_value[j])//判断前后两个数的大小
{
temp = G_int_value[i];//将比较后大的元素赋值给定义的int变量
G_int_value[i] = G_int_value[j];//将后一个元素的值赋值给前一个元素
G_int_value[j] = temp;//将int变量中存储的元素值赋值给后一个元素
goto id;//返回标识,继续判断后面的元素
}
else
if (j < G_int_value.Length - 1)//判断是否执行到最后一个元素
{
j++;//如果没有,则再往后判断
goto id;//返回标识,继续判断后面的元素
}
}
txt_str2.Clear();//清空控件内字符串
foreach (int i in G_int_value)//遍历字符串集合
{
txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
}
}
else
{
MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
}
3.快速排序法对一维数组进行排序
private int[] G_int_value;//定义数组字段

private Random G_Random = new Random();//创建随机数对象

//交换数据
private void swap(ref int l, ref int r)
{
int temp;//临时值
temp = l;//记录前一个值
l = r;//记录后一个值
r = temp;//前后交换数据
}

private void Sort(int[] list, int low, int high)
{
int pivot;//临时变量,用来存储最大值
int l, r;//分别用来记录遍历到的索引和最大索引
int mid;//中间索引
if (high <= low)//判断输入的值是否合法
return;
else if (high == low + 1)//判断两个索引是否相邻
{
if (list[low] > list[high])//判断前面的值是否大于后面的值
swap(ref list[low], ref list[high]);//交换前后索引的值
return;
}
mid = (low + high) >> 1;//记录数组的中间索引
pivot = list[mid];//初始化临时变量的值
swap(ref list[low], ref list[mid]);//交换第一个值和中间值的索引顺序
l = low + 1;//记录遍历到的索引值
r = high;//记录最大索引
try
{
//使用do...while循环遍历数组,并比较前后值的大小
do
{

while (l <= r && list[l] < pivot)//判断遍历到的索引是否小于最大索引
l++;//索引值加1
while (list[r] >= pivot)//判断最大值是否大于等于记录的分支点
r--;//做大索引值减1
if (l < r)//如果当前遍历到的值小于最大值
swap(ref list[l], ref list[r]);//交换顺序

} while (l < r);
list[low] = list[r];//在最小索引处记录最小值
list[r] = pivot;//在最大索引处记录最大值
if (low + 1 < r)//判断最小索引是否小于最大索引
Sort(list, low, r - 1);//调用自身进行快速排序
if (r + 1 < high)//判断最大索引是否小于数组长度
Sort(list, r + 1, high);//调用自身进行快速排序
}
catch { }
}
4.直接插入法对一维数组进行排序
if (G_int_value != null)
{
for (int i = 0; i < G_int_value.Length; ++i)//循环访问数组中的元素
{
int temp = G_int_value[i];//定义一个int变量,并使用获得的数组元素值赋值
int j = i;
while ((j > 0) && (G_int_value[j - 1] > temp))//判断数组中的元素是否大于获得的值
{
G_int_value[j] = G_int_value[j - 1];//如果是,则将后一个元素的值提前
--j;
}
G_int_value[j] = temp;//最后将int变量存储的值赋值给最后一个元素
}
txt_str2.Clear();//清空控件内字符串
foreach (int i in G_int_value)//遍历字符串集合
{
txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
}
}
else
{
MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
}
5.希尔排序法对一维数组进行排序
if (G_int_value != null)
{
int inc;//定义一个int变量,用来确定每个有序序列的个数
for (inc = 1; inc <= G_int_value.Length / 9; inc = 3 * inc + 1) ;//为有序序列赋值
for (; inc > 0; inc /= 3)
{
for (int i = inc + 1; i <= G_int_value.Length; i += inc)
{
int t = G_int_value[i - 1];//记录当前值
int j = i;//定义下一个索引
while ((j > inc) && (G_int_value[j - inc - 1] > t))
{
G_int_value[j - 1] = G_int_value[j - inc - 1];//交换数据
j -= inc;
}
G_int_value[j - 1] = t;//将下一个元素值设置为当前值
}
}
txt_str2.Clear();//清空控件内字符串
foreach (int i in G_int_value)//遍历字符串集合
{
txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
}
}
else
{
MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
}

posted @ 2013-07-17 23:18 蒋晓宇 阅读(13) 评论(0)编辑

  2013年7月9日

此处代码来源于http://blog.sina.com.cn/iphonesdk

UIImageView图片自动切换

-(void)viewDidLoad{
// create the view that will execute our animation
UIImageView* campFireView = [[UIImageView alloc] initWithFrame:self.view.frame];
     
     // load all the frames of our animation
     campFireView.animationImages = [NSArray arrayWithObjects:   
                                 [UIImage imageNamed:@"campFire01.gif"],
                                 [UIImage imageNamed:@"campFire02.gif"],
                                 [UIImage imageNamed:@"campFire03.gif"], nil];
     
     // all frames will execute in 1.75 seconds
     campFireView.animationDuration = 1.75;
     // repeat the annimation forever
     campFireView.animationRepeatCount = 0;
     // start animating
     [campFireView startAnimating];
     // add the animation view to the main window
     [self.view addSubview:campFireView];
}

按钮打开URL地图

-(IBAction)openMaps{
     NSString* addressText = @"1 Queen st, Auckland, NZ";
    addressText = [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
    NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];
    //NSlog(urlText);
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
}

 图片的持续移动

- (void)viewDidLoad
{
    //定义图片的位置和尺寸,位置:x=10.0f, y=10.0f ,尺寸:x=50.0f, y=40.0f
    UIImageView *subview = [[UIImageView alloc] initWithFrame:
                            CGRectMake(10.0f, 10.0f, 50.0f, 40.0f)];
    
    //设定图片名称,myPic.png已经存在,拖放添加图片文件到image项目文件夹中
    [subview setImage:[UIImage imageNamed:@"image2.jpg"]];
    
    //启用动画移动
    [UIImageView beginAnimations:nil context:NULL];
    
    //移动时间2秒
    [UIImageView setAnimationDuration:2];
    
    //图片持续移动
    [UIImageView setAnimationBeginsFromCurrentState:YES];
    
    //重新定义图片的位置和尺寸,位置
    subview.frame = CGRectMake(60.0, 100.0,200.0, 160.0);
    
    //完成动画移动
    [UIImageView commitAnimations];
    
    //在 View 中加入图片 subview
    [self.view addSubview:subview];
    
    //使用后释放图片, 使用iOS5,对像为iOS4.3以上可以忽略这步骤
    //[subview release];
}

加减法

int count = 0;
-(IBAction)reset{
    count = 0;
    counter.text = @"0";
    
}

- (IBAction)addUnit {
    
    if(count >= 999) return;
    
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", ++count];
    counter.text = numValue;
}

- (IBAction)subtractUnit {
    
    if(count <= 0) return;
    
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", --count];
    counter.text = numValue;
}

 

posted @ 2013-07-09 10:40 蒋晓宇 阅读(9) 评论(0)编辑

  2013年4月20日

效果图

 

在storyborad中添加的视图Navigation Controller(把table view的Content设为Static Cells),View Controller(+scroll view),

 

文件:

在BIDViewController.h

//
//  BIDViewController.h
//  scrollView
//
//  Created by jxy on 13-4-19.
//  Copyright (c) 2013年 jxy. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface BIDViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *myscrollview;


@end

在BIDViewController.m

//
//  BIDViewController.m
//  scrollView
//
//  Created by jxy on 13-4-19.
//  Copyright (c) 2013年 jxy. All rights reserved.
//

#import "BIDViewController.h"

@interface BIDViewController ()

@end

@implementation BIDViewController
@synthesize myscrollview;


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIImageView *imageViewFirst = nil;
    imageViewFirst = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"kaifeng.tiff"]];
    [imageViewFirst setFrame:CGRectMake(10, 12, 106, 106)];
    [myscrollview addSubview:imageViewFirst];
    
    UILabel *labelTitle = nil;
    labelTitle = [[UILabel alloc]initWithFrame:CGRectMake(126, 12, 184, 36)];
    labelTitle.text = @"开封府";
    labelTitle.font = [UIFont fontWithName:@"Arial" size:30];   //设置内容字体和字体大小
    [myscrollview addSubview:labelTitle];
    
    UIImageView *imageStar = nil;
    imageStar = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"xing.tiff"]];
    [imageStar setFrame:CGRectMake(126, 54, 97, 18)];
    [myscrollview addSubview:imageStar];
    
    UILabel *labelTicket = nil;
    labelTicket = [[UILabel alloc]initWithFrame:CGRectMake(126, 76, 75, 21)];
    labelTicket.text = @"门票 60元";
    labelTicket.font = [UIFont fontWithName:@"Arial" size:17];
    labelTicket.textColor =  [UIColor lightGrayColor];
    [myscrollview addSubview:labelTicket];
    
    UILabel *labelLevel = nil;
    labelLevel = [[UILabel alloc]initWithFrame:CGRectMake(126, 94, 97, 21)];
    labelLevel.text = @"AAAA风景区";
    labelLevel.font = [UIFont fontWithName:@"Arial" size:17];
    labelLevel.textColor =  [UIColor lightGrayColor];
    [myscrollview addSubview:labelLevel];
    
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button1.frame = CGRectMake(10, 126, 300, 44);
    [button1 setTitle:@"导览地图 自动导游" forState:UIControlStateNormal];/////////////看这里
    [button1 addTarget:self action:@selector(btn1p:) forControlEvents:UIControlEventTouchUpInside];
    [myscrollview addSubview:button1];
    
    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button2.frame = CGRectMake(10, 177, 300, 44);
    [button2 setTitle:@"景点图片 语音解说" forState:UIControlStateNormal];
    [myscrollview addSubview:button2];
    
    UILabel *labelinfo = nil;
    labelinfo = [[UILabel alloc]initWithFrame:CGRectMake(20, 228, 50, 30)];
    labelinfo.text = @"简介";
    labelinfo.font = [UIFont fontWithName:@"Arial" size:25];
    [myscrollview addSubview:labelinfo];
    
    UILabel *textlabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 275, 320, 224)];
    textlabel.text=@"开封古称东京、汴京(亦有大梁、汴梁之称),简称汴,有“十朝古都”、“七朝都会”之称。开封是清明上河图的原创地,有“东京梦华”之美誉,开封是中国优秀旅游城市、全国双拥模范城、全国创建文明城市工作先进城市,也是河南省中原城市群和沿黄“三点一线”黄金旅游线路三大中心城市之一。开封是世界上唯一一座城市中轴线从未变动的都城,城摞城遗址在世界考古史和都城史上是绝无仅有的。北宋东京开封是当时世界最繁华、面积最大、人口最多的大都市。现辖尉氏、杞、通许、兰考、开封五县和鼓楼、龙亭、禹王台、顺河回族、金明五区。";
    textlabel.numberOfLines = 0;
    textlabel.font = [UIFont fontWithName:@"Arial"size:14];//设置字体名字和字体大小
    [myscrollview addSubview:textlabel];
    
    /*UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 275, 320, 224)];
    [textView setText:@"开封古称东京、汴京(亦有大梁、汴梁之称),简称汴,有“十朝古都”、“七朝都会”之称。开封是清明上河图的原创地,有“东京梦华”之美誉,开封是中国优秀旅游城市、全国双拥模范城、全国创建文明城市工作先进城市,也是河南省中原城市群和沿黄“三点一线”黄金旅游线路三大中心城市之一。开封是世界上唯一一座城市中轴线从未变动的都城,城摞城遗址在世界考古史和都城史上是绝无仅有的。北宋东京开封是当时世界最繁华、面积最大、人口最多的大都市。现辖尉氏、杞、通许、兰考、开封五县和鼓楼、龙亭、禹王台、顺河回族、金明五区。"];
    textView.font = [UIFont fontWithName:@"Arial"size:14];//设置字体名字和字体大小
    textView.editable = NO;
    [myscrollview addSubview:textView];*/
    
    UILabel *labelinfo2 = nil;
    labelinfo2 = [[UILabel alloc]initWithFrame:CGRectMake(20, 500, 100, 30)];
    labelinfo2.text = @"旅行贴士";
    labelinfo2.font = [UIFont fontWithName:@"Arial" size:25];
    [myscrollview addSubview:labelinfo2];
    
    UILabel *labelinfo3 = nil;
    labelinfo3 = [[UILabel alloc]initWithFrame:CGRectMake(28, 530, 263, 48)];
    labelinfo3.text = @"市内乘坐1,4,5,8,9,16,20,31路可直达";
    labelinfo3.font = [UIFont fontWithName:@"Arial" size:14];
    [myscrollview addSubview:labelinfo3];
    
    UIButton *button3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button3.frame = CGRectMake(10, 580, 300, 44);
    [button3 setTitle:@"地址:河南省开封市鼓楼区包公湖" forState:UIControlStateNormal];
    //button3.alignmentRectInsets [UIEdgeInsetsMake(0, 0, 0, 0)];
    [myscrollview addSubview:button3];
    
    UIButton *button4 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button4.frame = CGRectMake(10, 630, 300, 44);
    [button4 setTitle:@"电话:0378-39370066" forState:UIControlStateNormal];
    [myscrollview addSubview:button4];
    
    [myscrollview setContentSize:CGSizeMake(320, 680)];
     
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)btn1p:(id)sender {
    //UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:nil delegate:self cancelButtonTitle:@"关闭" otherButtonTitles:nil];
    //[alert show];
    [self performSegueWithIdentifier:@"MytestSegue" sender:self];
}
@end

注意:

这样就可以在代码中制定这个segue

源代码:scrollView.zip

另一个scrollview:ScollView.zip

posted @ 2013-04-20 17:02 蒋晓宇 阅读(189) 评论(2)编辑

UITextField的父类UIControl

 

UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];  //初始化textfield并设置位置及大小

text.borderStyle = UITextBorderStyleRoundedRect;    //设置边框样式,只有设置了才会显示边框样式  
typedef enum {
    UITextBorderStyleNone, 
    UITextBorderStyleLine,
    UITextBorderStyleBezel,
    UITextBorderStyleRoundedRect  

} UITextBorderStyle;

text.backgroundColor = [UIColor whiteColor];   //设置输入框的背景颜色,此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉 
text.placeholder = @"password";   //当输入框没有内容时,水印提示 提示内容为password
text.font = [UIFont fontWithName:@"Arial" size:20.0f];   //设置输入框内容的字体样式和大小
text.textColor = [UIColor redColor];   //设置字体颜色
text.clearButtonMode = UITextFieldViewModeAlways;  //输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容

typedef enum {
    UITextFieldViewModeNever,  从不出现
    UITextFieldViewModeWhileEditing, 编辑时出现
    UITextFieldViewModeUnlessEditing,  除了编辑外都出现
    UITextFieldViewModeAlways   一直出现

} UITextFieldViewMode;

text.text = @"一开始就在输入框的文字";     //输入框中一开始就有的文字
text.secureTextEntry = YES;     //每输入一个字符就变成点 用于密码输入
text.autocorrectionType = UITextAutocorrectionTypeNo;  //是否自动纠错

typedef enum {
    UITextAutocorrectionTypeDefault, 默认
    UITextAutocorrectionTypeNo,   不自动纠错
    UITextAutocorrectionTypeYes,  自动纠错

} UITextAutocorrectionType;


text.clearsOnBeginEditing = YES;    //再次编辑就清空
text.textAlignment = UITextAlignmentLeft;   //内容对齐方式
text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;  //内容的垂直对齐方式  UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment

text.adjustsFontSizeToFitWidth = YES;  //设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动

text.minimumFontSize = 20;   //设置自动缩小显示的最小字体大小

text.keyboardType = UIKeyboardTypeNumberPad;   //设置键盘的样式

typedef enum {
    UIKeyboardTypeDefault,       默认键盘,支持所有字符         
    UIKeyboardTypeASCIICapable,  支持ASCII的默认键盘
    UIKeyboardTypeNumbersAndPunctuation,  标准电话键盘,支持+*#字符
    UIKeyboardTypeURL,            URL键盘,支持.com按钮 只支持URL字符
UIKeyboardTypeNumberPad,              数字键盘
UIKeyboardTypePhonePad,    电话键盘
    UIKeyboardTypeNamePhonePad,   电话键盘,也支持输入人名
UIKeyboardTypeEmailAddress,   用于输入电子 邮件地址的键盘     
UIKeyboardTypeDecimalPad,     数字键盘 有数字和小数点
    UIKeyboardTypeTwitter,        优化的键盘,方便输入@、#字符
    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 

} UIKeyboardType;

 

text.autocapitalizationType = UITextAutocapitalizationTypeNone;  //首字母是否自动大写

typedef enum {
    UITextAutocapitalizationTypeNone, 不自动大写
    UITextAutocapitalizationTypeWords,  单词首字母大写
    UITextAutocapitalizationTypeSentences,  句子的首字母大写
    UITextAutocapitalizationTypeAllCharacters, 所有字母都大写

} UITextAutocapitalizationType;

 

text.returnKeyType =UIReturnKeyDone;   //return键变成什么键

typedef enum {
    UIReturnKeyDefault, 默认 灰色按钮,标有Return
    UIReturnKeyGo,      标有Go的蓝色按钮
    UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索
    UIReturnKeyJoin,标有Join的蓝色按钮
    UIReturnKeyNext,标有Next的蓝色按钮
    UIReturnKeyRoute,标有Route的蓝色按钮
    UIReturnKeySearch,标有Search的蓝色按钮
    UIReturnKeySend,标有Send的蓝色按钮
    UIReturnKeyYahoo,标有Yahoo的蓝色按钮
    UIReturnKeyYahoo,标有Yahoo的蓝色按钮
    UIReturnKeyEmergencyCall, 紧急呼叫按钮

} UIReturnKeyType;
 

textView.keyboardAppearance=UIKeyboardAppearanceDefault;  //键盘外观

typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert,     深灰 石墨色

} UIReturnKeyType;

text.delegate = self;   //设置代理 用于实现协议

[self.window addSubview:text];   //把textfield加到视图中

UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];  //最右侧加图片是以下代码   左侧类似


text.rightView=image;


text.rightViewMode = UITextFieldViewModeAlways; 


typedef enum {    UITextFieldViewModeNever,    UITextFieldViewModeWhileEditing,    UITextFieldViewModeUnlessEditing,    UITextFieldViewModeAlways

} UITextFieldViewMode;


类要采用UITextFieldDelegate协议   //按return键键盘往下收  becomeFirstResponder

text.delegate = self;  声明text的代理是我,我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议

 

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [text resignFirstResponder];    //主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收
    return YES;

}

 

重写绘制行为

 

除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。

 

– textRectForBounds:      //重写来重置文字区域
– drawTextInRect:         //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– placeholderRectForBounds:  //重写来重置占位符区域
– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– borderRectForBounds:  //重写来重置边缘区域
– editingRectForBounds:  //重写来重置编辑区域
– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真
– leftViewRectForBounds:

– rightViewRectForBounds:

 

委托方法

 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 

 

//返回一个BOOL值,指定是否循序文本字段开始编辑 

 

    return YES;  
}  

- (void)textFieldDidBeginEditing:(UITextField *)textField{  

 

//开始编辑时触发,文本字段将成为first responder  

 

}  

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{  

 

//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder  
   //要想在用户结束编辑时阻止文本字段消失,可以返回NO     

//这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息

 
 

    return NO;  
}  

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  

 

//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  
//这对于想要加入撤销选项的应用程序特别有用  
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     
//要防止文字被改变可以返回NO  

//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  

 

     return YES;  
}  

- (BOOL)textFieldShouldClear:(UITextField *)textField{  

 

//返回一个BOOL值指明是否允许根据用户请求清除内容  

//可以设置在特定条件下才允许清除内容 

 

     return YES;  
}  

-(BOOL)textFieldShouldReturn:(UITextField *)textField{  

 

//返回一个BOOL值,指明是否允许在按下回车键时结束编辑  
 //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];

//查一下resign这个单词的意思就明白这个方法了 

 

     return YES;  

}  

 

 

通知

 

UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件

 

UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification

当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。

 

因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知

 

UIKeyboardWillShowNotification   //键盘显示之前发送
UIKeyboardDidShowNotification    //键盘显示之后发送
UIKeyboardWillHideNotification   //键盘隐藏之前发送

UIKeyboardDidHideNotification    //键盘隐藏之后发送

 

 


1、Text :设置文本框的默认文本。
2、Placeholder : 可以在文本框中显示灰色的字,用于提示用户应该在这个文本框输入什么内容。当这个文本框中输入了数据时,用于提示的灰色的字将会自动消失。
3、Background :
4、Disabled : 若选中此项,用户将不能更改文本框内容。
5、接下来是三个按钮,用来设置对齐方式。
6、Border Style : 选择边界风格。
7、Clear Button : 这是一个下拉菜单,你可以选择清除按钮什么时候出现,所谓清除按钮就是出一个现在文本框右边的小 X ,你可以有以下选择:

Never appears : 从不出现
Appears while editing : 编辑时出现
Appears unless editing : 

Is always visible : 总是可见

8、Clear when editing begins : 若选中此项,则当开始编辑这个文本框时,文本框中之前的内容会被清除掉。比如,你现在这个文本框 A 中输入了 "What" ,之后去编辑文本框 B,若再回来编辑文本框 A ,则

抱歉!评论已关闭.