iOS初級開發筆記:Block回撥,實現簡單的繫結支付寶邏輯

蘆葦科技App技術團隊發表於2019-03-30

繫結支付寶首頁和填寫資料繫結頁之間,

需要在填寫頁填寫好手機號,驗證碼等,點選確認繫結後跳回到繫結首頁。並且繫結按鈕變為已繫結按鈕暫未繫結label變為輸入的支付寶賬號。並且點選已繫結按鈕會跳轉到解綁介面。

整個流程在app上展示為

iOS初級開發筆記:Block回撥,實現簡單的繫結支付寶邏輯

一、在傳資訊的controller內(即填寫頁的controller內)建立Block:

fillAlipayViewController.h中:

// 建立block
typedef void(^bindAlipayBlock)(NSDictionary *bindDict);

// 監聽返回的繫結狀態
@property (nonatomic, copy) bindAlipayBlock returnBlock;
複製程式碼
  • 這裡解釋一下建立語句:

    • 我們可以通過關鍵字typedef來為block起型別名稱,然後直接通過型別名進行block的建立;
    • void為返回值;
    • ^bindAlipayBlock為block名稱;
    • NSDictionary *bindDict為引數。
  • 因為需要傳兩個值(支付寶號和繫結狀態),所以建立型別是字典,命名也要明確Block是什麼型別:

(NSDictionary *bindDict)
複製程式碼

fillAlipayViewController.m中:

需建立全域性變數:_alipayAccount即為監聽輸入的支付寶賬號全域性變數。支付寶賬號為字串:

{
    NSString *_alipayAccount;//支付寶賬號
}
複製程式碼

在輸入完成後點選確認的點選事件中,確定若響應Block例項,則傳出字典,字典內寫相應的鍵值,(即將繫結YES狀態和支付寶賬號傳出去):

if (self.returnBlock){

self.returnBlock(@{@"isBind":@"YES",@"alipayAccount":self->_alipayAccount});
}
複製程式碼

接著下面是返回上一頁繫結首頁語句:

[self.navigationController popViewControllerAnimated:YES];
複製程式碼

二、在接收訊號的controller內(即繫結首頁的controller內):

bindAlipayViewController.m中:

建立對應全域性變數來接收值:

{
    BOOL _isBind;//繫結狀態
    NSString *_bindAlipayAccount;//繫結的支付寶賬號
}

複製程式碼

跳轉方法的實現中:

- (void)jumpToControllerWithType:(NSString *)type{
    if([type intValue]== 1){
        ABFillAlipayViewController *vc=[[ABFillAlipayViewController alloc]init];
        WS(weakself);
        vc.returnBlock = ^(NSDictionary *bindDict) {
            NSLog(@"返回了~");
            // 繫結狀態判斷
            self->_isBind = [bindDict[@"isBind"] isEqualToString:@"YES"]?YES:NO;
            // 支付寶賬號賦值
            self->_bindAlipayAccount = bindDict[@"alipayAccount"];
//            重新整理tableView中資料
            [weakself.tableView reloadData];
        };
        
        [self.navigationController pushViewController:vc animated:YES];
    }else if([type intValue]== 2){
        [self.navigationController pushViewController:[[ABRemoveBindAlipayViewController alloc]init] animated:YES];
    }
}
複製程式碼

_isBind做判斷,等於字串@“YES”的時候為YES,否則NO。

_bindalipayAccount就等於字典傳過來的值。

因為繫結首頁使用tableView畫的,所以在cell內容中判斷,若繫結成功,則做相應改變賦值:

if (_isBind == YES) {
        // 繫結按鈕隱藏,顯示已繫結按鈕
        cell.bindButton.hidden = YES;
        cell.boundButton.hidden = NO;
        // 顯示支付寶賬號
        cell.subLabel.text = _bindPhoneNumber; 
    }else{
        // 繫結按鈕顯示,隱藏已繫結按鈕
        cell.bindButton.hidden = NO;
        cell.boundButton.hidden = YES;
        // 顯示“暫未繫結賬號”
        cell.subLabel.text = @“暫未繫結賬號”;
    }
複製程式碼

作者介紹

  • 李鴻:廣州蘆葦科技 APP 團隊 iOS 開發工程師

內推資訊

  • 我們正在招募小夥伴,有興趣的小夥伴可以把簡歷發到 app@talkmoney.cn,備註:來自掘金社群
  • 詳情可以戳這裡--> 廣州蘆葦資訊科技

相關文章