1. 程式人生 > >iOS之流佈局UICollectionView全系列教程

iOS之流佈局UICollectionView全系列教程

iOS流佈局UICollectionView系列一——初識與簡單使用UICollectionView

一、簡介

        UICollectionView是iOS6之後引入的一個新的UI控制元件,它和UITableView有著諸多的相似之處,其中許多代理方法都十分類似。簡單來說,UICollectionView是比UITbleView更加強大的一個UI控制元件,有如下幾個方面:

1、支援水平和垂直兩種方向的佈局

2、通過layout配置方式進行佈局

3、類似於TableView中的cell特性外,CollectionView中的Item大小和位置可以自由定義

4、通過layout佈局回撥的代理方法,可以動態的定製每個item的大小和collection的大體佈局屬性

5、更加強大一點,完全自定義一套layout佈局方案,可以實現意想不到的效果

這篇部落格,我們主要討論CollectionView使用原生layout的方法和相關屬性,其他特點和更強的制定化,會在後面的部落格中介紹

二、先來實現一個最簡單的九宮格類佈局

        在瞭解UICollectionView的更多屬性前,我們先來使用其進行一個最簡單的流佈局試試看,在controller的viewDidLoad中新增如下程式碼:

    //建立一個layout佈局類
    UICollectionViewFlowLayout * layout = [[UICollectionViewFlowLayout alloc]init];     //設定佈局方向為垂直流佈局     layout.scrollDirection = UICollectionViewScrollDirectionVertical;     //設定每個item的大小為100*100     layout.itemSize = CGSizeMake(100100);     //建立collectionView 通過一個佈局策略layout來建立     UICollectionView * collect = [[UICollectionView
 alloc]initWithFrame:self.view.frame collectionViewLayout:layout];     //代理設定     collect.delegate=self;     collect.dataSource=self;     //註冊item型別 這裡使用系統的型別     [collect registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellid"];         [self.view addSubview:collect];

這裡有一點需要注意,collectionView在完成代理回撥前,必須註冊一個cell,類似如下:

[collect registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellid"];

這和tableView有些類似,又有些不同,因為tableView除了註冊cell的方法外,還可以通過臨時建立來做:

//tableView在從複用池中取cell的時候,有如下兩種方法
//使用這種方式如果複用池中無,是可以返回nil的,我們在臨時建立即可
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
//6.0後使用如下的方法直接從註冊的cell類獲取建立,如果沒有註冊 會崩潰
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);

我們可以分析:因為UICollectionView是iOS6.0之前的新類,因此這裡統一了從複用池中獲取cell的方法,沒有再提供可以返回nil的方式,並且在UICollectionView的回撥代理中,只能使用從複用池中獲取cell的方式進行cell的返回,其他方式會崩潰,例如:

//這是正確的方法
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell * cell  = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellid" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
    return cell;
}

//這樣做會崩潰
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
//    UICollectionViewCell * cell  = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellid" forIndexPath:indexPath];
//    cell.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
    UICollectionViewCell * cell = [[UICollectionViewCell alloc]init];
    return cell;
}

上面錯誤的方式會崩潰,資訊如下,讓我們使用從複用池中取cell的方式:


上面的設定完成後,我們來實現如下幾個代理方法:

這裡與TableView的回撥方式十分類似

//返回分割槽個數
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}
//返回每個分割槽的item個數
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 10;
}
//返回每個item
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell * cell  = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellid" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
    return cell;
}

效果如下:


同樣,如果內容的大小超出一屏,和tableView類似是可以進行檢視滑動的。

還有一點細節,我們在上面設定佈局方式的時候設定了垂直佈局:

layout.scrollDirection = UICollectionViewScrollDirectionVertical;
//這個是水平佈局
//layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

這樣系統會在一行充滿後進行第二行的排列,如果設定為水平佈局,則會在一列充滿後,進行第二列的佈局,這種方式也被稱為流式佈局

三、UICollectionView中的常用方法和屬性

//通過一個佈局策略初識化CollectionView
- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout;

//獲取和設定collection的layout
@property (nonatomicstrongUICollectionViewLayout *collectionViewLayout;

//資料來源和代理
@property (nonatomicweaknullableid <UICollectionViewDelegate> delegate;
@property (nonatomicweaknullableid <UICollectionViewDataSource> dataSource;

//從一個class或者xib檔案進行cell(item)的註冊
- (void)registerClass:(nullable Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(nullable UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;

//下面兩個方法與上面相似,這裡註冊的是頭檢視或者尾檢視的類
//其中第二個引數是設定 頭檢視或者尾檢視 系統為我們定義好了這兩個字串
//UIKIT_EXTERN NSString *const UICollectionElementKindSectionHeader NS_AVAILABLE_IOS(6_0);
//UIKIT_EXTERN NSString *const UICollectionElementKindSectionFooter NS_AVAILABLE_IOS(6_0);
- (void)registerClass:(nullable Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(nullable UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier;

//這兩個方法是從複用池中取出cell或者頭尾檢視
- (__kindof UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
- (__kindof UICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;

//設定是否允許選中 預設yes
@property (nonatomicBOOL allowsSelection;

//設定是否允許多選 預設no
@property (nonatomicBOOL allowsMultipleSelection;

//獲取所有選中的item的位置資訊
- (nullable NSArray<NSIndexPath *> *)indexPathsForSelectedItems; 

//設定選中某一item,並使檢視滑動到相應位置,scrollPosition是滑動位置的相關引數,如下:
/*
typedef NS_OPTIONS(NSUInteger, UICollectionViewScrollPosition) {
    //無
    UICollectionViewScrollPositionNone                 = 0,
    //垂直佈局時使用的 對應上中下
    UICollectionViewScrollPositionTop                  = 1 << 0,
    UICollectionViewScrollPositionCenteredVertically   = 1 << 1,
    UICollectionViewScrollPositionBottom               = 1 << 2,
    //水平佈局時使用的  對應左中右
    UICollectionViewScrollPositionLeft                 = 1 << 3,
    UICollectionViewScrollPositionCenteredHorizontally = 1 << 4,
    UICollectionViewScrollPositionRight                = 1 << 5
};
*/
- (void)selectItemAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition;

//將某一item取消選中
- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

//重新載入資料
- (void)reloadData;

//下面這兩個方法,可以重新設定collection的佈局,後面的方法多了一個佈局完成後的回撥,iOS7後可以用
//使用這兩個方法可以產生非常炫酷的動畫效果
- (void)setCollectionViewLayout:(UICollectionViewLayout *)layout animated:(BOOL)animated;
- (void)setCollectionViewLayout:(UICollectionViewLayout *)layout animated:(BOOL)animated completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);

//下面這些方法更加強大,我們可以對佈局更改後的動畫進行設定
//這個方法傳入一個佈局策略layout,系統會開始進行佈局渲染,返回一個UICollectionViewTransitionLayout物件
//這個UICollectionViewTransitionLayout物件管理動畫的相關屬性,我們可以進行設定
- (UICollectionViewTransitionLayout *)startInteractiveTransitionToCollectionViewLayout:(UICollectionViewLayout *)layout completion:(nullable UICollectionViewLayoutInteractiveTransitionCompletion)completion NS_AVAILABLE_IOS(7_0);
//準備好動畫設定後,我們需要呼叫下面的方法進行佈局動畫的展示,之後會呼叫上面方法的block回撥
- (void)finishInteractiveTransition NS_AVAILABLE_IOS(7_0);
//呼叫這個方法取消上面的佈局動畫設定,之後也會進行上面方法的block回撥
- (void)cancelInteractiveTransition NS_AVAILABLE_IOS(7_0);

//獲取分割槽數
- (NSInteger)numberOfSections;

//獲取某一分割槽的item數
- (NSInteger)numberOfItemsInSection:(NSInteger)section;

//下面兩個方法獲取item或者頭尾檢視的layout屬性,這個UICollectionViewLayoutAttributes物件
//存放著佈局的相關資料,可以用來做完全自定義佈局,後面部落格會介紹
- (nullable UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
- (nullable UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

//獲取某一點所在的indexpath位置
- (nullable NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point;

//獲取某個cell所在的indexPath
- (nullable NSIndexPath *)indexPathForCell:(UICollectionViewCell *)cell;

//根據indexPath獲取cell
- (nullable UICollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath;

//獲取所有可見cell的陣列
- (NSArray<__kindof UICollectionViewCell *> *)visibleCells;

//獲取所有可見cell的位置陣列
- (NSArray<NSIndexPath *> *)indexPathsForVisibleItems;

//下面三個方法是iOS9中新新增的方法,用於獲取頭尾檢視
- (UICollectionReusableView *)supplementaryViewForElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0);
- (NSArray<UICollectionReusableView *> *)visibleSupplementaryViewsOfKind:(NSString *)elementKind NS_AVAILABLE_IOS(9_0);
- (NSArray<NSIndexPath *> *)indexPathsForVisibleSupplementaryElementsOfKind:(NSString *)elementKind NS_AVAILABLE_IOS(9_0);

//使檢視滑動到某一位置,可以帶動畫效果
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated;

//下面這些方法用於動態新增,刪除,移動某些分割槽獲取items
- (void)insertSections:(NSIndexSet *)sections;
- (void)deleteSections:(NSIndexSet *)sections;
- (void)reloadSections:(NSIndexSet *)sections;
- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection;

- (void)insertItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
- (void)deleteItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
- (void)reloadItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
- (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath;

iOS流佈局UICollectionView系列二——UICollectionView的代理方法

一、引言

        在上一篇部落格中,介紹了最基本的UICollectionView的使用和其中我們常用的屬性和方法,也介紹了瀑布流佈局的過程與思路,這篇部落格來討論關於UICollectionView的代理方法的使用。

二、UICollectionViewDataSource協議

        這個協議主要用於collectionView相關資料的處理,包含方法如下:

首先,有兩個方法是我們必須實現的:

設定每個分割槽的Item個數

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

設定返回每個item的屬性

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

下面的方法是可選實現的:

雖然這個方法是可選的,一般我們都會去實現,設定分割槽數

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

對頭檢視或者尾檢視進行設定

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

設定某個item是否可以被移動,返回NO則不能移動

- (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0);

移動item的時候,會呼叫這個方法

- (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath;

三、UICollectionViewDelegate協議

        這個協議用來設定和處理collectionView的功能和一些邏輯,所有方法都是可選實現:

是否允許某個Item的高亮,返回NO,則不能進入高亮狀態

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

當item高亮時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

結束高亮狀態時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath;

是否可以選中某個Item,返回NO,則不能選中

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath;

是否可以取消選中某個Item

- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

已經選中某個item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

取消選中某個Item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

將要載入某個Item時呼叫的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

將要載入頭尾檢視時呼叫的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

已經展示某個Item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath;

已經展示某個頭尾檢視時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

這個方法設定是否展示長按選單

- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath;

長按選單中可以觸發一下類複製貼上的方法,效果如下:


這個方法用於設定要展示的選單選項

- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

這個方法用於實現點選選單按鈕後的觸發方法,通過測試,只有copy,cut和paste三個方法可以使用

- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

通過下面的方式可以將點選按鈕的方法名打印出來:

-(void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
    NSLog(@"%@",NSStringFromSelector(action));
}

collectionView進行重新佈局時呼叫的方法

- (nonnull UICollectionViewTransitionLayout *)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout;

iOS流佈局UICollectionView系列三——使用FlowLayout進行更靈活佈局

一、引言

        前面的部落格介紹了UICollectionView的相關方法和其協議中的方法,但對佈局的管理類UICollectionViewFlowLayout沒有著重探討,這篇部落格介紹關於佈局的相關設定和屬性方法。通過layout的設定,我們可以編寫更加靈活的佈局效果。

二、將九宮格式的佈局進行升級

        在第一篇部落格中,通過UICollectionView,我們很輕鬆的完成了一個九宮格的佈局,但是如此中規中矩的佈局方式,有時候並不能滿足我們的需求,有時我們需要每一個Item展示不同的大小,程式碼如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
    UICollectionView *collect = [[UICollectionView alloc]initWithFrame:CGRectMake(00320400) collectionViewLayout:layout];
    collect.delegate=self;
    collect.dataSource=self;
    
    [collect registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellid"];
  ;
    [self.view addSubview:collect];
    
    
}
//設定每個item的大小,雙數的為50*50 單數的為100*100
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row%2==0) {
        return CGSizeMake(5050);
    }else{
        return CGSizeMake(100100);
    }
}

//代理相應方法
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 100;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell * cell  = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellid" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
    return cell;
}

效果如下:


現在的佈局效果是不是炫酷了許多。

三、UICollectionViewFlowLayout相關屬性方法

        UICollectionViewFlowLayout是系統提供給我們一個封裝好的流佈局設定類,其中有一些佈局屬性我們可以進行設定: 

設定行與行之間的間距最小距離

@property (nonatomic) CGFloat minimumLineSpacing;

設定列與列之間的間距最小距離

@property (nonatomic) CGFloat minimumInteritemSpacing;

相關推薦

iOS佈局UICollectionView系列教程

iOS流佈局UICollectionView系列一——初識與簡單使用UICollectionView 一、簡介         UICollectionView是iOS6之後引入的一個新的UI控制元件,它和UITableView有著諸多的相似之處,其中

Express系列教程(三):get傳參

listen mit for 發送 query 系列教程 系列 真的 bsp 一、關於get請求 一般在網站開發中,get都用作數據獲取和查詢,類似於數據庫中的查詢操作,當服務器解析前臺資源後即傳輸相應內容;而查詢字符串是在URL上進行的,形如: http://loca

Express系列教程(五):Express的中間件

lur 操作系統 outer The scrip option public 說明 .get 一、中間件 從字面意思,我們可以了解到它大概就是做中間代理操作,事實也是如此;大多數情況下,中間件就是在做接收到請求和發送響應中間的一系列操作。事實上,express是一個路由和

Express系列教程(七):cookie的加密

fun return 部分 ror 重新 provided 取出 ole 底層 一、關於cookie加密 cookie加密是讓客戶端用戶無法的值cookie明文信息,是數據安全的重要部分;一般的我們可以在保存cookie時對cookie信息進行加密,或者在res.cook

Express系列教程(九):將session上傳至mysql數據庫

brush l數據庫 inf port module ava 一個 coo oca 一、簡介 實際引用中,有些公司在不同地區會設置不同服務器,因此就需要用到nginx以實現負載均衡,這時,將session數據保存至數據庫就成為了需要面對的問題,我們以MySQL數據庫為例,

Express系列教程(十):jade模板引擎

語法 前言 const ews 並且 如果 () handle 轉換 一、前言 隨著前端業務的不斷發展,頁面交互邏輯的不斷提高,讓數據和界面實現分離漸漸被提了出來。JavaScript的MVC思想也流行了起來,在這種背景下,基於node.js的模板引擎也隨之出現。 什麽

iOS瀑布佈局實現

最近開發中遇到了關於瀑布流佈局的需求,所有就整理了一個瀑布流佈局類,使用時只需要調整列數、行間距、列間距、上下左右邊緣就可以做出各種需求的瀑布流佈局,下面直接上程式碼: 自定義瀑布流需要繼承UICol

跨平臺移動開發phonegap/cordova 3.3系列教程-app啟動畫面

1.app啟動畫面設計 用photoshop設計啟動畫面,圖片解析度為720*1280 儲存的檔名為splash.png 將splash.png複製到res\drawable,如圖 PS:要先新增閃屏外掛才能使用(示例中已經新增,此步略過) cordova pl

iOSUICollectionView自定義佈局

UICollectionView基礎 UICollectionViewFlowLayout:檢視佈局物件(流水佈局:一行排滿,自動排到下行),繼承自UICollectionViewLayout。UICollectionViewLayout內有一個collec

iOS開發第三方支付微信支付教程,史上最新最第三方微信支付方式實現、微信整合教程,微信實現流程

 1. 微信支付微信支付前奏大致流程為 : 1. 公司需要到微信進行申請app支付功能 , 獲得appid和微信支付商戶號(mch_id)和API祕鑰(key) 、 Appsecret(secret),開發中用到的,很重要 appid:appid是微信公眾賬號

WCF系列教程消息交換模式請求與答復模式(Request/Reply)

人員 point program enabled col ise sleep wds 類型 1、使用WCF請求與答復模式須知 (1)、客戶端調用WCF服務端需要等待服務端的返回,即使返回類型是void (2)、相比Duplex來講,這種模式強調的是客戶端的被動接受,也就是說

10Python系列深淺拷貝標準庫系列datetime模塊

格式轉換 字符串 Python標準庫系列之datetime模塊Fast implementation of the datetime type.功能說明datetime.date.today()打印輸出當前的系統日期datetime.date.fromtimestamp(time.time())將時間

WCF系列教程WCF服務宿主

class ati 托管 系列 msm scm 打開 實例 部分 本文參考自http://www.cnblogs.com/wangweimutou/p/4377062.html,純屬讀書筆記,加深記憶。 一、簡介 任何一個程序的運行都需要依賴一個確定的進程中,WCF也不例外

WCF系列教程客戶端異步調用服務

1.5 void 添加引用 dsl idt pan important 配置 但是 本文參考自http://www.cnblogs.com/wangweimutou/p/4409227.html,純屬讀書筆記,加深記憶 一、簡介 在前面的隨筆中,詳細的介紹了WCF客戶端服務

WCF系列教程WCF服務協定

需要 通信 mes 配置 ace 交換 對象 web服務 程序 本文參考自:http://www.cnblogs.com/wangweimutou/p/4422883.html,純屬讀書筆記,加深記憶 一、服務協定簡介: 1、WCF所有的服務協定層裏面的服務接口,都有一個S

WCF系列教程WCF實例化

說明 con bind () 應用程序 ebe 控制臺應用程序 alt .text 本文參考自http://www.cnblogs.com/wangweimutou/p/4517951.html,純屬讀書筆記,加深記憶 一、理解WCF實例化機制 1、WCF實例化,是指對用戶

RabbitMQ系列教程三:發布/訂閱(Publish/Subscribe)

mqc 標題 整合 參數 cti 事情 return 控制臺 run (本教程是使用Net客戶端,也就是針對微軟技術平臺的) 在前一個教程中,我們創建了一個工作隊列。工作隊列背後的假設是每個任務會被交付給一個【工人】。在這一部分我們將做一些完全不同的事情--我們將向多個

Pycharm教程(24)——Pycharm編輯器功能宏定義

ans 指針 ext election ger rda 宏定義 中源 全選   1、為什麽使用宏   增加你須要反復某種操作非常多次。比如選中源代碼並將其發送到控制臺端調試,我們能不能將著一系列操作簡化為一步,甚至用一組快捷鍵來取代呢?   2、準備工作   (

Pycharm教程(11)——Pycharm調試器斷點篇

pes eas 觀察 project 項目 python pre 啟動 image   最全Pycharm教程(1)——定制外觀   最全Pycharm教程(2)——代碼風格   最全Pycharm教程(3)——代碼的調試、執行

新手指南:DVWA-1.9級別教程SQL Injection

escape index.php 偽造 掌握 post 數字型註入 初學者 hsl 攻擊 *本文原創作者:lonehand,轉載須註明來自FreeBuf.COM 目前,最新的DVWA已經更新到1.9版本(http://www.dvwa.co.uk/),而網上的教程大多停