您的位置:首页 > 移动开发 > IOS开发

ios 一个月以来的总结。。。

2013-02-22 15:49 666 查看
方法常用:

1,- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

2,- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

3,- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

4,- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

tableview 常用代理方法

staticNSString* courseIdentifier = @"CourseCell";

CourseCell* cell = [tableView dequeueReusableCellWithIdentifier:courseIdentifier];

if (!cell)

{

NSArray* array = [[UINibnibWithNibName:courseIdentifier bundle:nil] instantiateWithOwner:selfoptions:nil];

cell = [array lastObject];

}

[self.mTableViewreloadData];

tableviewcell 重用,注意identifier,注意reloadData的含义,就是告诉tableview俺有数据需要加载了,有新的数据了。

-(IBAction)changeState:(id)sender

{

UIButton *button = (UIButton *)sender;

if (button.tag == 0) {

[selfloadData_category:XIN_NEI_LAO_NIAN_KElastId:@""];

buttonState = 0;

[self.xinnei_buttonsetEnabled:NO];

[self.shennei_buttonsetEnabled:YES];

[self.daiding_buttonsetEnabled:YES];

self.tempArray = self.xinnei_laonian_array;

[self.mTableViewreloadData];

}elseif (button.tag == 1) {

[selfloadData_category:SHEN_NEI_KElastId:@""];

buttonState = 1;

[self.xinnei_buttonsetEnabled:YES];

[self.shennei_buttonsetEnabled:NO];

[self.daiding_buttonsetEnabled:YES];

self.tempArray = self.shennei_array;

[self.mTableViewreloadData];

}elseif (button.tag == 2) {

buttonState = 2;

[self.xinnei_buttonsetEnabled:YES];

[self.shennei_buttonsetEnabled:YES];

[self.daiding_buttonsetEnabled:NO];

self.tempArray = self.daiding_array;

[self.mTableViewreloadData];

}

}

状体改变,button 设置不同的状体,加载不同的数据

cell.contentView.backgroundColor = [[UIColoralloc] initWithRed:255/255.0

green:248/255.0

blue:240/255.0

alpha:1];

设置cell背景颜色

[cell.lecturer1ButtonaddTarget:selfaction:@selector(turnToLectureIntroduce:) forControlEvents:UIControlEventTouchUpInside];

[cell.lecturer2ButtonaddTarget:selfaction:@selector(turnToLectureIntroduce:) forControlEvents:UIControlEventTouchUpInside];

手动给button连接对应事件,方法

cell.lecturer1Button.tag = [indexPath row]*2;

cell.lecturer2Button.tag = [indexPath row]*2+1;

UIButton* button = (UIButton*)sender;

Course *course = [self.tempArrayobjectAtIndex:button.tag/2];

Teacher *teacher =nil;

if (button.tag%2== 0) {

teacher = [course.teachersobjectAtIndex:0];

}else{

teacher = [course.teachersobjectAtIndex:1];

}

一个设置的小技巧,关于tag

UIAlertView *alert = [[[UIAlertViewalloc] initWithTitle:@"只有登录后才能预约,是否进行登录?" message:nil delegate:selfcancelButtonTitle:nilotherButtonTitles:@"登录",@"取消", nil] autorelease];

[alert show];

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 0){

LoginViewController* controller = [[[LoginViewControlleralloc] init] autorelease];

controller.isFromCourse = YES;

controller.reservationButton = reservationButton;

controller.executeReservationRquestDelegate = self;

[SharedAppDelegate.window.rootViewControllerpresentModalViewController:controller animated:YES];

}

alertview 外加一个代理使用

- (void)loadData_category:(NSString *)category lastId :(NSString *)lastId{

NSString *deviceId = [[UIDevicecurrentDevice] uniqueGlobalDeviceIdentifier];

NSString *userIdString = SharedAppDelegate.accountInfo.accountId;

NSURL* url = [NSURLURLWithString:COURSEURL];

AFHTTPClient* httpClient = [[AFHTTPClientalloc] initWithBaseURL:url];

NSDictionary *param = [NSDictionarydictionaryWithObjectsAndKeys:

lastId, @"last_id",

[NSStringstringWithFormat:@"%d", PAGESIZE], @"page_size",

category, @"class_name",

userIdString,@"userid",

deviceId,@"device_id",

nil];

TTLog(@"params:%@", param);

NSURLRequest* request = [httpClient requestWithMethod:@"POST"path:@""parameters:param];

AFJSONRequestOperation *operation = [AFJSONRequestOperationJSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

[selfhiddenHUD];

TTLog(@"response:%@", JSON);

ResponseState *state = [ResponseStateresponseStateWithDic:JSON];

courseHasMore = state.hasMore

}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {

TTLog(@"failed:%@", error);

[selfhiddenHUD];

}];

[operation start];

[selfshowHUD];

}

初始化一个dictionary,进行一次网络请求,注意这个过程是异步的,有时候可能出现数据不同步的现象。

a.h

@protocol ExecuteReservationRquestDelegate <NSObject>

-(void)reservation:(id)sender flag:(int)flag;

@end

@interface LoginViewController : BaseViewController <TencentSessionDelegate>

{

NSString *openId;

}

a.m

[self.executeReservationRquestDelegatereservation:self.reservationButtonflag:1];

@property (nonatomic,assign )id <ExecuteReservationRquestDelegate>executeReservationRquestDelegate;

@end

b.h

@interface CourseViewController : BaseViewController <UITableViewDataSource, UITableViewDelegate,UIAlertViewDelegate,ExecuteReservationRquestDelegate>

b.m

controller.executeReservationRquestDelegate = self;

一个代理的使用

@interface NSDictionary(NullReplace)

- (id)valueForKeyNotNull:(NSString *)key;

@end

@interface ResponseState : NSObject

@property (retain, nonatomic) NSString *responseMessage;

@property (nonatomic) int responseCode;

@property (nonatomic) int hasMore;

@implementation NSDictionary(NullReplace)

- (id)valueForKeyNotNull:(NSString *)key{

id object = [selfvalueForKey:key];

if ([object isKindOfClass:[NSNumberclass]]

|| [object isKindOfClass:[NSStringclass]]

|| [object isKindOfClass:[NSArrayclass]]

|| [object isKindOfClass:[NSDictionaryclass]]) {

return object;

}

returnnil;

}

@end

@implementation NSArray(NullReplace)

- (id)valueForKeyNotNull:(NSString *)key{

returnnil;

}

@end

@implementation ResponseState

@synthesize responseCode;

@synthesize responseMessage;

+ (ResponseState *)responseStateWithDic:(NSDictionary *)dic{

ResponseState *state = [[[ResponseStatealloc] init] autorelease];

state.responseCode = [[dic valueForKeyNotNull:@"code"] intValue];

state.responseMessage = [dic valueForKeyNotNull:@"message"];

state.hasMore = [[dic valueForKeyNotNull:@"has_more"] intValue];

// state.newsId = [[dic valueForKeyNotNull:@"news_id"]];

return state;

}

@end

一个model 以及对json的解析过程

+(NSString *)getFilePath

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString* filePath = [documentsDirectory stringByAppendingPathComponent:FILENAME];

return filePath;

}

//读取文件数据

+(NSString *)readFromFile

{

NSError *error;

NSString *filePath = [selfgetFilePath];

NSString *stringData = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:&error];

if (stringData == nil) {

TTLog(@"read error %@",[error localizedFailureReason]);

returnnil;

}

else{

return stringData;

}

}

+(BOOL)writeToFile_DataString:(NSString *)dataString

{

NSError *error;

NSString *filePath = [selfgetFilePath];

return [dataString writeToFile:filePath atomically:YESencoding:NSUTF8StringEncodingerror:&error];

}

一个传说中的缓存,注意获取的是iphone手机上的doucument目录,可读可写

NSString *jsonString = [ReadWriteDataToFilereadFromFile];

id JsonFromCache = [jsonString JSONValue];

[ReadWriteDataToFilewriteToFile_DataString:[JSON JSONRepresentation]];

self.xinnei_laonian_array = [CoursecourseListWithDic:JSON];

self.tempArray = [CoursecourseListWithDic:JSON];

一个是将string 转为json,一个是将json转换为string,注意需要两个文件,#import "NSObject+SBJSON.h"#import "NSString+SBJSON.h",根据类名字可以判断是通过类别给它们类扩展的方法。

NSString *deviceId = [[UIDevicecurrentDevice] uniqueGlobalDeviceIdentifier];#import "UIDevice+ID.h"

一获得deviceid 的方法

- (void)viewDidLoad

{

[superviewDidLoad];

[self.xinnei_buttonsetEnabled:NO];

buttonState = 0;

[selfloadDataFromCashe_JSON];

[selfloadData_category:XIN_NEI_LAO_NIAN_KElastId:@""];

[selfloadData_category:SHEN_NEI_KElastId:@""];

[selfloadData_category:@""lastId:@""];

}

注意viewdidload的加载顺序,viewdidload 应该写在前面。boss说的

self.navigationController popViewControllerAnimated:<#(BOOL)#>

self.navigationController pushViewController:<#(UIViewController *)#> animated:<#(BOOL)#>

viewcontroller presentModalViewController:<#(UIViewController *)#> animated:<#(BOOL)#>

viewcontroller dismissModalViewControllerAnimated:<#(BOOL)#>

关于controller的显示和隐藏,一个是在navigationcontroller 中的使用,一个是普通controller的使用

self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]];

self.navigationController = [[[UINavigationControlleralloc] initWithRootViewController:self.tabBarController] autorelease];

self.window.rootViewController = self.navigationController;

[self.windowmakeKeyAndVisible];

项目开始时候的加载,app delegate 有个win do w ,而window 有个rootviewcontroller 最初的梦想

NSURL *url = [NSURLURLWithString:CONTENTINTRODUCE];

NSURLRequest * request = [NSURLRequestrequestWithURL:url];

[self.contentWebViewloadRequest:request];

[superviewDidLoad];

webview 的加载

#pragma mark Setters

- (void)doneLoadingTableViewData{

[moreButtonhideIndicator];

reloading = NO;

[self.tableViewreloadData];

[refreshHeaderViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

}

#pragma mark UIScrollViewDelegate Methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

[refreshHeaderViewegoRefreshScrollViewDidScroll:scrollView];

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

[refreshHeaderViewegoRefreshScrollViewDidEndDragging:scrollView];

}

#pragma mark - EGERefreshTableHeaderViewDelegate Methods

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{

reloading = YES;

[selfreloadTableViewDataSource];

}

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{

returnreloading; // should return if data source model is reloading

}

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{

return [NSDatedate]; // should return date data source was last changed

}

- (void)loadSubView{

if (refreshHeaderView == nil) {

EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderViewalloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)] ;

view.delegate = self;

[self.tableViewaddSubview:view];

refreshHeaderView = view;

[view release];

}

}

@end

EGORefreshTableHeaderDelegate

#import "EGORefreshTableHeaderView.h"

关于那个下拉刷新的效果对应的部分代码

@property (strong,nonatomic)IBOutletUIButton *hotSpotButton;

其中有些需要注意的就是,选择 strong= retain还是weak = assign,non atomic 是原子相关的。在需要的时候就用iboutlet插座变量,以便外面的变量来访问。据说版本不同,有的自动@synthesize

initWithFrame:CGRectMake,cgsize里面有宽度有个高度 ,这个是调整大小的,以及相对位置, content isEqualToString:CGSize sizeOne = [teacher1.namesizeWithFont:cell.lecturer1Button.titleLabel.font];,计算字体的面积

关于控件大小的一些设置

NSArray* array = [[UINibnibWithNibName:courseIdentifier bundle:nil] instantiateWithOwner:selfoptions:nil];

cell = [array lastObject];

[UIViewController alloc]initWithNibName:<#(NSString *)#> bundle:<#(NSBundle *)#>;

策略:声明个变量记住一下自己想记住的信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: