iOS 登錄界面

最近在項(xiàng)目中添加了登陸注冊(cè)模塊 把自己遇到的問(wèn)題和經(jīng)驗(yàn)分享一下

首先是登陸模塊

后臺(tái)約定登陸接口發(fā)起登陸請(qǐng)求時(shí)需要傳
參數(shù):

  • ulogin:用戶名或手機(jī)號(hào)碼
  • upassword:密碼明文

返回:

  • status :0表示用戶被禁用或者用戶名密碼錯(cuò)誤
  • status:1表示登陸成功并返回user數(shù)據(jù) token JSESSIONID

首先是界面


登陸界面

界面用xib搭建
登陸按鈕 默認(rèn)不可交互的
按鈕圓角可通過(guò)xib的runtime Attributes設(shè)置


圓形按鈕

密碼框設(shè)置為安全輸入

對(duì)兩個(gè)輸入框的輸入長(zhǎng)度要進(jìn)行判斷

系統(tǒng)提供的代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text

不好使
對(duì)兩個(gè)輸入框進(jìn)行UIControlEventEditingChanged監(jiān)聽(tīng)

[self.accountInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[self.passwordInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
-(void)textFieldDidChange:(UITextField * )textField{
    if (textField == _accountInput) {
        accountOK = NO;
        if(textField.text.length > 1) accountOK = YES;
    }
    if (textField == _passwordInput) {
        if(textField.text.length >= 6 && textField.text.length <= 20)passwordOk = YES;
        else passwordOk = NO;
        if (textField.text.length >= 20) {
            textField.text = [textField.text substringToIndex:20];
        }
    }
    if(accountOK&&passwordOk){
        _loginBtu.enabled = YES;
        allOK = YES;
    }else{
        _loginBtu.enabled = NO;
         allOK = NO;
    }
}

用戶名長(zhǎng)度大于1且密碼在6-20位之間時(shí)候(密碼大于20位就不可輸入)按鈕是可以交互的
設(shè)置三個(gè)標(biāo)志全局變量進(jìn)行判斷登錄按鈕是否可交互

BOOL allOK;
BOOL accountOK;
BOOL passwordOk;

當(dāng)用戶名和密碼都格式正確時(shí) 點(diǎn)擊登錄按鈕發(fā)去登錄請(qǐng)求

- (IBAction)loginAction:(id)sender {
    if(allOK){
        _hud = [[MBProgressHUD alloc]init];
        _hud.labelText = @"正在登錄...";
        [self.navigationController.view addSubview:_hud];
        [_hud show:YES];
        [HBNetRequest Post:LOGIN para:@{
                                        @"ulogin"        :_accountInput.text,
                                        @"upassword"     :_passwordInput.text }
                  complete:^(id data) {
                      NSUInteger status = [data[@"status"] integerValue];
                      if (status==0) {
                          [self.view makeToast:@"用戶名或者密碼錯(cuò)誤" duration:1.0 position:CSToastPositionCenter];
                          [_hud hide:YES];
                      }
                      if (status == 1) {
                          NSDictionary *userDic = data[@"user"];
                          HBUserItem *user = [[HBUserItem alloc] initWithDictionary:userDic error:nil];
                          [HBUserItem saveUser:user];
                          [HBAuxiliary saveCookie];

                          [_hud hide:YES];
                          [self hiddenKeyboardForTap];
                          
                          AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
                          appDelegate.window.rootViewController = [MainViewController new];
                      }
                  } fail:^(NSError *error) {
                      [_hud hide:YES];
                  }];
    }
 
}

請(qǐng)求完畢后 服務(wù)器會(huì)給你緩存下cookie 里面包含了一些信息
我把它打印輸出

<NSHTTPCookie 
version:0 
name:"JSESSIONID" 
value:"9BE362C1ACCB6D82B3B6551F97C60F09" 
expiresDate:(null) 
created:2017-03-27 04:38:54 +0000 
sessionOnly:TRUE 
domain:"172.16.120.65" 
partition:"none" 
path:"/carshop/" 
isSecure:FALSE
>

我在靜態(tài)方法庫(kù)添加了一個(gè) 用于快速保存和取cookie到NSUserDefaults的方法方便存取和使用 因?yàn)楹竺娴拈_(kāi)發(fā)可能會(huì)使用到cookie

每次應(yīng)用啟動(dòng)時(shí)系統(tǒng)自己加載cookie會(huì)需要一定的時(shí)間
關(guān)于ios的Cookie那些事

didFinishLaunchingWithOptions方法里加載cookie

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

三個(gè)方法如下:

+(void)saveCookie{
    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
    
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject: cookiesData forKey: @"sessionCookies"];
    [defaults synchronize];
}


+(NSHTTPCookieStorage*)getCookies{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    
    for (NSHTTPCookie *cookie in cookies){
        [cookieStorage setCookie: cookie];
    }
    return cookieStorage;
}


+(void)loadCookies{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    
    for (NSHTTPCookie *cookie in cookies){
        [cookieStorage setCookie: cookie];
    }
}

登錄時(shí)要隱藏輸入鍵盤(pán) 讓鍵盤(pán)放棄第一響應(yīng)

- (void)hiddenKeyboardForTap{
    [_accountInput resignFirstResponder];
    [_passwordInput resignFirstResponder];
}

左上角添加返回按鈕

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(backMainController)];

回到主界面 登錄完成后一樣

- (void)backMainController{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    appDelegate.window.rootViewController = [MainViewController new];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆挽,一起剝皮案震驚了整個(gè)濱河市频蛔,隨后出現(xiàn)的幾起案子祝谚,更是在濱河造成了極大的恐慌,老刑警劉巖门烂,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碎连,居然都是意外死亡否过,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門李丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苦锨,“玉大人,你說(shuō)我怎么就攤上這事趴泌≈凼妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵嗜憔,是天一觀的道長(zhǎng)秃励。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吉捶,這世上最難降的妖魔是什么夺鲜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮呐舔,結(jié)果婚禮上币励,老公的妹妹穿的比我還像新娘。我一直安慰自己滋早,他們只是感情好榄审,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著杆麸,像睡著了一般搁进。 火紅的嫁衣襯著肌膚如雪浪感。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天饼问,我揣著相機(jī)與錄音影兽,去河邊找鬼。 笑死莱革,一個(gè)胖子當(dāng)著我的面吹牛峻堰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅视,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捐名,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了闹击?” 一聲冷哼從身側(cè)響起镶蹋,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏半,沒(méi)想到半個(gè)月后贺归,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断箫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拂酣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仲义。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婶熬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出光坝,到底是詐尸還是另有隱情尸诽,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布盯另,位于F島的核電站性含,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鸳惯。R本人自食惡果不足惜商蕴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芝发。 院中可真熱鬧绪商,春花似錦、人聲如沸辅鲸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至例书,卻和暖如春锣尉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背决采。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工自沧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人树瞭。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓拇厢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晒喷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孝偎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,855評(píng)論 25 707
  • 吃貨地圖產(chǎn)品需求文檔 V1.0-2015/03/30 1概述 1.1產(chǎn)品概述及目標(biāo) 概述:“吃貨地圖”是一款基于i...
    michaelshan閱讀 5,846評(píng)論 1 46
  • 2017.02.22 可以練習(xí),每當(dāng)這個(gè)時(shí)候凉敲,腦袋就犯困邪媳,我這腦袋真是神奇呀,一說(shuō)讓你做事情荡陷,你就犯困,你可不要太...
    Carden閱讀 1,332評(píng)論 0 1
  • 時(shí)光機(jī)的碎片:《致吶喊》 高學(xué)海 年輕時(shí)曾做過(guò)許多的夢(mèng) 在無(wú)端悲哀與反省的過(guò)程中 逐漸忘卻 回憶總是讓人歡欣 卻充...
    高學(xué)海閱讀 137評(píng)論 0 0
  • 農(nóng)歷八月 -桂月 古人認(rèn)為八月是桂樹(shù)的花季,所以農(nóng)歷八月又被稱作桂月叮姑。這時(shí)候滿城的桂花開(kāi)始悄悄吐露花蕊唉地,再過(guò)幾日便...
    形色閱讀 1,340評(píng)論 0 5