IOS開發---菜鳥學習之路--(八)-實現新聞頁面


本章將具體講述如何結合前兩張的內容最終實現一個新聞頁面的雛形

之所以稱之為雛形,是因為本章實現的內容只是實現了最基礎的效果

還有很多其他諸如下拉刷新 頁面導航等效果都需要投入一些時間進行研究

 好了直接開始整題吧

首先在我們需要新建一個ViewController 同時呢需要勾選 需要創建XIB文件

然后我們從工具欄中直接將tablewview拖拽到我們視圖上去

如下所示

 

接下來我們需要為TableView設置數據源以及代理

我們按住Control鍵,然后鼠標左鍵點擊TableView 將其拖拽到File's onwer上面

需要操作兩次,分別選擇  dataSource 和delegate

 

 

這樣就完成XIB 文件的部分了,

然后我們選擇.H 文件進行配置

我們只需要繼承兩個代理事件

然后添加一個NSARRAY的 listdata就可以進入下一步了

其實這些內容一些教材上面會比我寫的更詳細,大家可以好好看一下

#import <UIKit/UIKit.h>
@interface NEWSViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
    NSArray *listdata;
}
@property(nonatomic,retain) NSArray *listdata;
@end

接下來就是.m文件了

這邊我們只要實現 第六章里講的所有方法就可以我們想要的效果了

另外這邊還需要使用到前幾章將到getwebinfo 類(網絡數據獲取類,關於網絡獲取我之后會專門列出一個章節進行介紹,包含如何實現異步處理等操作)

首先我們需要引用 geiwebinfo類 

在前面部分加入

#import "GetWebInfo.h"

然后我們還需要實現一個InitlistData方法用來實現獲取數據具體代碼如下

我們需要在默認的viewDidLoad 方法中調用此方法,這樣的話界面一啟動,他就會去網絡上獲取數據

如果希望切換界面的時候也重新獲取數據話,那么只要將 獲取數據部分的代碼放到ViewWillApper方法中

-(void) initListData
{
    GetWebInfo *getwebinfo=[GetWebInfo alloc];
    NSString *myparameters=@"&Method=getnewsinfo";
    getwebinfo.parameters=myparameters;
    NSString *webReturnMessage=[getwebinfo dogetWebInfo];
    NSData* jsonData=[webReturnMessage dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *keys =   [NSJSONSerialization
                       JSONObjectWithData:jsonData
                       options:NSJSONReadingMutableContainers
                       error:nil];
    self.listdata=keys;
}
- (void)viewDidLoad
{
    [self initListData];
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

 

 

接下來我們還需要一個個 實現其他幾個UITableview的方法 方法的作用我在前面已經介紹過了 這邊就不做重復講解了 直接上代碼

numberOfRowsInSection 方法的話我們可以直接返回我們的listdata的個數來告訴UITABLEVIEW有多少行
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [lisrtdata count];
}

 

然后是heightForRowAtIndexPath 設置行高方法,我這邊返回的JSON數據里面是包含一個haveimage 的BOOL類型參數,用以判斷是否有圖片,

如果沒有圖片的話,那么就不管他是第幾條記錄全部都返回50的高度

否則的話再判斷當前是否是第一條如果是第一條的話則需要顯示大圖片那么其高度就要擴大 變為140的高度左右,否則的話就利用普通的樣式 使用70的高度

PS:大家如果嫌麻煩的話 高度方面可以只設置兩種高度 一種是140的 頭圖片高度,另一個則不管有沒有圖片都顯示為70高度。 

//設置行高
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *haveImage=[[listdata objectAtIndex:[indexPath row]] valueForKey:@"haveimage"];
    if([haveImage isEqual:@"False"])
    {
        return 50;
    }
    else
    {
        if([indexPath row]==0)
        {
            return 140;
        }
        else
        {
            return 70;
        }    }
}

 設置好了高度之后,我們就需要實現我們的核心代碼了

這當中有部分內容涉及到圖片轉換的問題,我會在之后的內容中進行講解的。

這邊呢我們需要實現 cellForRowAtIndexPath  也就是我前面所說得行繪制事件

具體的介紹我就不多說了,大家可以參照代碼來思考。

我就把主要的思路跟大家講解下

其實行繪制事件 的思路和 行高度的思路是相同的,只不過一個是返回不同的高度,另一個則是返回返回不同的UITableViewCell

同樣的我們首先要判斷有沒有圖片,如果有圖片的話,再判斷一下是不是第一條記錄,是的話就返回大圖,否則的話就返回小圖的樣式,這兩個樣式就是根據我們前面一章所創建的樣式。

具體的請參照下面的代碼進行理解。

-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *haveImage=[[NSString alloc] initWithString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
    if([haveImage isEqual:@"False"])
    {
         //static NSString *SignleNoImageIdentifier=@"SignleIdentifier";
    static NSString *SignleNoImageIdentifier=@"SignleNoImageIdentifier";
        SignleNoImageTableViewCell *cell= (SignleNoImageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SignleNoImageIdentifier];
        if(cell==nil){
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SignleNoImageTableViewCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }
        cell.mylabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
        return cell;
           }
    else
    {
        if([indexPath row]==0)
        {
            // static NSString *TopbigImageIdentifier=@"SignleIdentifier";
            static NSString *TopbigImageIdentifier=@"TopbigImageIdentifier";
            TopBigImageCell *cell= (TopBigImageCell *)[tableView dequeueReusableCellWithIdentifier:TopbigImageIdentifier];
            if(cell==nil){
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TopBigImageCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];
            }
             cell.btlabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
            NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
            UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];
            cell.myimageView.image=newjiaban;
            return cell;
            
        }
        else
        {
            static NSString *SignleIdentifier=@"SignleIdentifier";
            SingleTableViewCell *cell= (SingleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:SignleIdentifier];
            if(cell==nil){
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SingleTableViewCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];
            }
             cell.mylabel.text=[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"title"];
                    NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:[[[_list objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]] valueForKey:@"images"]];
            UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];
            cell.myimageView.image=newjiaban;
            return cell;
            
        }

 
    }
}

OK今天的內容就這么多了。

感謝觀看,另外如果本文有什么問題的話請及時回復,本人會認真修改,以免誤人子弟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM