iPhone開發(fā)問題匯總
iPhone開發(fā)問題是本文要介紹的內(nèi)容,主要是來講述字啊iphone開發(fā)過程中遇到的一些BUG,如何來解決,來看詳細(xì)內(nèi)容一一解決方案。
Q:[讓tableview滾動到頂端] 從另一個view進(jìn)入到一個tableview時,總是會自動滾動到先前的滾動條位置,我想讓它每次進(jìn)入這個tableview時,都滾動回最頂端,應(yīng)該用哪個消息呢?
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ù),滾動的話tableview的superview時scrollview,scrollview可以滾動到某個position 那么就要計算這個position position = table row height * index,就得到滾動的位置了。
Q:在使用SLQite3調(diào)用sqlite3_bind_text函數(shù)時需要使用char *類型的參數(shù),在sqlite3_column_text函數(shù)中需要使用char *類型的返回值,如何將字符串對象在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程序開發(fā)中常遇到“unrecognized selector sent to instance”的問題?
A:造成該問題的大部分原因是對象被提前release了,在不希望它release的情況下,指針還在,對象已經(jīng)不在了。主要是因為init初始化函數(shù)中,沒有對屬性使用self.[屬性]=xxxx的方式賦值,而是直接對屬性所對應(yīng)的私有變量進(jìn)行賦值,導(dǎo)致屬性對象沒有retain而提前釋放。解決方法,使用self.[屬性]=xxxx語句對屬性賦值即可。
Q:我想計算兩個NSDate的數(shù)據(jù)相差幾天幾個小時幾分幾秒怎么辦阿?
A:
- NSTimeInterval
- time = [date1 timeIntervalSinceDate:date2];
time是date1和date2的秒間隔,大于零說明date1比date2晚,反之。。。。要得到幾天幾分幾秒的,算算就出來了。
Q:怎么實現(xiàn)一個登錄頁面,在登錄成功后跳轉(zhuǎn)到另一個頁面(我想實現(xiàn)先是一個登錄界面點擊一個登錄按鈕載跳轉(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中如何實現(xiàn)類似于Timer的定時操作?
A:類似下面代碼實現(xiàn):
- timer = [NSTimer scheduledTimerWithTimeInterval:(3) target:self selector:@selector (onTimer:) userInfo:nil repeats:YES];
- - (void)onTimer:(NSTimer*)timer {
- //處理
- ......
- }
Q:UITableViewCell 里 有個 UITextField當(dāng)點擊UITextField時會出現(xiàn)軟鍵盤,為了返回UITextField的值,我在valueChanged事件綁定了 rootViewController 的-(IBAction) textAction : (id) sender;可是我同時需要知道該Cell 的 indexPath.row 該怎么做?
A:有兩種方法:
方法1
先獲取UITextField所在的Cell.
- NSIndexPath *path = [tableView indexPathForCell:
- (UITableViewCell *) [ (UITextField *)sender superview] ];
方法2
首先,在table loadview 制造cell的時候在cell.tag和textField.tag 設(shè)個值
- tmpcell.tag = 3;
- tmpcell.textField.tag = 3;
然后事件啟動的時候這樣
- - (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開發(fā)問題匯總的內(nèi)容介紹完了,希望本文對你有所幫助!更多關(guān)于iphone開發(fā)的相關(guān)內(nèi)容,請參考 iphone開發(fā)頻道。