转自:http://express.ruanko.com/ruanko-express_42/technologyexchange8.html

作者:李远

在开发iphone软件的过程中,我走了很多弯路,但也积累了一些经验,在此整理成文,和iphone开发者们一同分享。

经验一:控件中文本框的字体居中

一般字体居中直接在xib界面中修改参数即可,但是像tableView等控件中加入的文本,就不能在xib中轻松的修改了。这时,就需要下面的语句:

label.textAlignment = UITextAlignmentCenter; 

这样,对应文本就可以居中了。

经验二:加载和删除页面

对于有多个页面的的程序(基本都是),这个经验是最基本的。

在需要加载新页面的地方放入下面语句即可加载页面:

[self.view addSubview:加载的页面.view]; 

删除页面时用下面语句:

[需要删除的页面.view removeFromSuperview]; 

注意,如果是要删除页面自身,则用:

[self.view removeFromSuperview]; 

并且注意,这个时候上级页面不能已经release了本页面。

经验三:修改导航控制器上导航按钮的文字

一般用导航控制器加载新页面后,导航按钮显示的文字是上个页面的名称。但是领导要求将文字改为“返回”,好吧,那就这样改:

UIBarButtonItem *backbutton = [[UIBarButtonItemalloc]init];
  backbutton.title = @"返回";
  self.navigationItem.backBarButtonItem = backbutton;
[backbutton release];

其实,导航按钮就是self.navigationItem.backBarButtonItem,我们只是自己做了一个显示着“返回”的按钮来替换了它。

经验四:在改导航控制器上增加新的导航按钮

一般导航页面中会需要增加按钮,这样实现:

self.navigationItem.rightBarButtonItem = BARBUTTON(@"新按钮",@selector(createClass)); 

建议平常不要修改leftBarButtonItem,因为它基本上是留给backBarButtonItem用的。

经验五:隐藏tableView的搜索栏

有很多iphone程序,它们的tableView中虽然加载了搜索栏,但是一开始是隐藏的,将列表向下拉,它才会显示出来。如何实现这一功能呢?只需要用下面的语句:

[self.tableViewsetContentOffset:CGPointMake(0.0, 44.0) animated:NO]; 

其实这个语句就是把tableView的页面坐标重新设置一下。还有,如果需要动画效果,设置animated:YES。

经验六:修改控件中的控件

程序里有个searchBar,领导觉得里面的“取消”按钮变为“搜索”按钮更合适,这个按钮就是控件中的控件。可以尝试这样修改:

   for(id cc in [searchBsubviews]){
        if([cc isKindOfClass:[UIButtonclass]])
        {
            UIButton *btn = (UIButton *)cc;
            [btn setTitle:@"搜索"  forState:UIControlStateNormal];
        }
}

这是一个通用的技巧,并且这个技巧可以在很多地方用到。

现在领导需要让searchBar进行搜索时,键盘的“search”按钮一开始就激活。修改一下上面代码就可以做到:

for(id cc in [searchBsubviews]){
        if([cc isKindOfClass:[UITextFieldclass]])
        {
            UITextField *txt=(UITextField*)cc;
            txt.enablesReturnKeyAutomatically=NO;
        }
  }

经验七:延时

哈哈,这个就是xcode中的delay函数:

[NSThread sleepForTimeInterval:0.2];//延时0.2秒 

不过对于现在交互式很强的面向界面的程序,建议少用它,而用下面“经验八”提到的方法。

经验八:NSTimer定时器

下面是定时器的事例,handleTimer方法可以自行定义。在需要的地方创建timer即可,handleTimer就可以每0.5秒执行一次。

需要定时处理的函数放在这:

 - (void) handleTimer: (NSTimer *) timer
    {
       //在这里进行处理
    }

定义的地方:

NSTimer *timer;
 
timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
		 target: self
		 selector: @selector(handleTimer:)
		 userInfo: nil
		 repeats: YES];

用[timer fire]可以直接调用handleTimer。用[timer invalidate]可以让计时器停止计时,注意,下次计时需要重新设定计时器。

好了,上面就是到目前为止我所总结的一点经验,希望能给iPhone开发者们带来帮助。如果有任何事情想与我讨论,请给我发邮件,我的邮箱地址:liyuan0331@gmail.com,欢迎来信。