分类目录归档:移动开发

iOS UINavigationController 手动控制视图跳转

使用UINavigationController操作A、B、C三个视图控制器时,若需要先从 A跳转到B ,再从 B跳转到C ,而最终希望栈中只有A和C,即C弹出后直接回到A,可以通过如下两种方式实现。

方式一:直接修改UINavigationController的视图控制器栈
在从B跳转到C时执行如下代码
(注意 [navArray count]-1 在根视图控制器时不能使用)

NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[navArray replaceObjectAtIndex:[navArray count]-1 withObject:CViewController];
[self.navigationController setViewControllers:navArray animated:YES];

方式二:先弹再压

UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:CViewController animated:YES];

参考StackOver:http://stackoverflow.com/a/17328244/1998721

iOS 中判断一个时间是否是”今天”

在聊天类的APP中,如果有信息列表功能,通常需要显示信息的时间。对于"今天"的信息,一般会显示具体的时间;而对于"今天"之前的信息,一般只需要显示日期即可。这时就需要进行时间判断,以决定这个时间是不是"今天"。

下面的代码是一种可行的方案:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY/MM/dd"];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:smsDate];
NSString *dateSMS = [dateFormatter stringFromDate:date];
NSDate *now = [NSDate date];
NSString *dateNow = [dateFormatter stringFromDate:now];
if ([dateSMS isEqualToString:dateNow]) {
    [dateFormatter setDateFormat:@"HH:mm"];
}
else {
    [dateFormatter 

iOS UITableView 在视图出现时滚动到底部

通讯录相关的iOS APP在显示信息列表时,通常希望打开信息列表后,直接滚动到用于显示信息内容的UITableView底部。

通过在视图控制器的

- (void)viewWillAppear:(BOOL)animated

中添加如下一行代码,可以实现此功能

[tableView setContentOffset:CGPointMake(CGFLOAT_MAX, CGFLOAT_MAX)]

stackoverflow上的回答:http://stackoverflow.com/questions/2770158/how-to-scroll-to-the-bottom-of-a-uitableview-on-the-iphone-before-the-view-appea