iPhone開(kāi)發(fā)問(wèn)題匯總
iPhone開(kāi)發(fā)問(wèn)題是本文要介紹的內(nèi)容,主要是來(lái)講述字啊iphone開(kāi)發(fā)過(guò)程中遇到的一些BUG,如何來(lái)解決,來(lái)看詳細(xì)內(nèi)容一一解決方案。
Q:[讓tableview滾動(dòng)到頂端] 從另一個(gè)view進(jìn)入到一個(gè)tableview時(shí),總是會(huì)自動(dòng)滾動(dòng)到先前的滾動(dòng)條位置,我想讓它每次進(jìn)入這個(gè)tableview時(shí),都滾動(dòng)回最頂端,應(yīng)該用哪個(gè)消息呢?
A: 方法一:使用 scrollToRowAtIndexPath
方法二:
- - (void)scrollToTop {
- [self.tableView setContentOffset:CGPointMake(0,0) animated:YES];
- }
- - (void)scrollToBottom {
- NSUInteger sectionCount = [self.tableView numberOfSections];
- if (sectionCount) {
- NSUInteger rowCount = [self.tableView numberOfRowsInSection:0];
- if (rowCount) {
- NSUInteger ii[2] = {0, rowCount - 1};
- NSIndexPath* indexPath = [NSIndexPath indexPathWithIndexes:ii length:2];
- [self.tableView scrollToRowAtIndexPath:indexPath
- atScrollPosition:UITableViewScrollPositionBottom animated:YES];
- }
- }
- }
方法三:
- [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:_currentRow inSection:0] animated:YES
- scrollPosition:UITableViewScrollPositionMiddle];
首先使用selectRowAtIndexes: 選擇行數(shù),滾動(dòng)的話tableview的superview時(shí)scrollview,scrollview可以滾動(dòng)到某個(gè)position 那么就要計(jì)算這個(gè)position position = table row height * index,就得到滾動(dòng)的位置了。
Q:在使用SLQite3調(diào)用sqlite3_bind_text函數(shù)時(shí)需要使用char *類(lèi)型的參數(shù),在sqlite3_column_text函數(shù)中需要使用char *類(lèi)型的返回值,如何將字符串對(duì)象在NSString和Char *之間進(jìn)行轉(zhuǎn)換?
A:
將NSString轉(zhuǎn)換成char *:[NSString UTF8String]
將char *轉(zhuǎn)換成NSString:[NSString stringWithUTF8String:]
例如:
- //=======NSString to char *==============
- NSString *updateSign = @"AAAA";
- sqlite3_bind_text(statement, 1, [updateSign UTF8String], -1, NULL);
- //=========char * to NSString============
- columnName.text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
Q:如何解決在iPhone程序開(kāi)發(fā)中常遇到“unrecognized selector sent to instance”的問(wèn)題?
A:造成該問(wèn)題的大部分原因是對(duì)象被提前release了,在不希望它release的情況下,指針還在,對(duì)象已經(jīng)不在了。主要是因?yàn)閕nit初始化函數(shù)中,沒(méi)有對(duì)屬性使用self.[屬性]=xxxx的方式賦值,而是直接對(duì)屬性所對(duì)應(yīng)的私有變量進(jìn)行賦值,導(dǎo)致屬性對(duì)象沒(méi)有retain而提前釋放。解決方法,使用self.[屬性]=xxxx語(yǔ)句對(duì)屬性賦值即可。
Q:我想計(jì)算兩個(gè)NSDate的數(shù)據(jù)相差幾天幾個(gè)小時(shí)幾分幾秒怎么辦阿?
A:
- NSTimeInterval
- time = [date1 timeIntervalSinceDate:date2];
time是date1和date2的秒間隔,大于零說(shuō)明date1比date2晚,反之。。。。要得到幾天幾分幾秒的,算算就出來(lái)了。
Q:怎么實(shí)現(xiàn)一個(gè)登錄頁(yè)面,在登錄成功后跳轉(zhuǎn)到另一個(gè)頁(yè)面(我想實(shí)現(xiàn)先是一個(gè)登錄界面點(diǎn)擊一個(gè)登錄按鈕載跳轉(zhuǎn)到UITabBarController界面怎樣處理啊)?
A:可以嘗試下面的方法:
1,在MainWindow.xib里放入LoginViewController和UITabBarController。
2,Delegate里application加入下記代碼。
- [window addSubview:tabBarController];
- [window addSubview:loginViewController];
3,Login成功后,在LoginViewController里加入下記代碼。
- [self.view removeFromSuperview];
Q:iPhone中如何實(shí)現(xiàn)類(lèi)似于Timer的定時(shí)操作?
A:類(lèi)似下面代碼實(shí)現(xiàn):
- timer = [NSTimer scheduledTimerWithTimeInterval:(3) target:self selector:@selector (onTimer:) userInfo:nil repeats:YES];
- - (void)onTimer:(NSTimer*)timer {
- //處理
- ......
- }
Q:UITableViewCell 里 有個(gè) UITextField當(dāng)點(diǎn)擊UITextField時(shí)會(huì)出現(xiàn)軟鍵盤(pán),為了返回UITextField的值,我在valueChanged事件綁定了 rootViewController 的-(IBAction) textAction : (id) sender;可是我同時(shí)需要知道該Cell 的 indexPath.row 該怎么做?
A:有兩種方法:
方法1
先獲取UITextField所在的Cell.
- NSIndexPath *path = [tableView indexPathForCell:
- (UITableViewCell *) [ (UITextField *)sender superview] ];
方法2
首先,在table loadview 制造cell的時(shí)候在cell.tag和textField.tag 設(shè)個(gè)值
- tmpcell.tag = 3;
- tmpcell.textField.tag = 3;
然后事件啟動(dòng)的時(shí)候這樣
- - (IBAction)textAction:(id)sender
- {
- NSInteger tag = [sender tag];
- NSIndexPath *indexPath = [self.tableView indexPathForCell: (UITableViewCell *)[self.tableView viewWithTag:tag]];
- [[[rawElementsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] setValue:[sender text] forKey:@"value"];
- }
小結(jié):iPhone開(kāi)發(fā)問(wèn)題匯總的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!更多關(guān)于iphone開(kāi)發(fā)的相關(guān)內(nèi)容,請(qǐng)參考 iphone開(kāi)發(fā)頻道。