整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          SwiftUI入門 - 3. 提示彈窗,TextField自動聚焦

          菜鳥入門,各位大佬輕噴,如有謬誤之處歡迎討論建議,也歡迎各位道友與我同行

          "不積跬步,無以至千里;不積小流,無以成江海"

          繼續

          續接上篇文章,我們實現了一個簡單的登陸界面,但是我們的表單提示,例如用戶名等,是用的文字在按鈕上方提示的

          那我們如何去實現一個提示框用于提示呢?然后再自動聚焦到輸入框中呢?

          提示框的實現

          // 是否顯示彈窗的標識
          @State private var showAlert:Bool = false;
          
          // 在登陸按鈕之后放置彈窗
          Button("登陸"){
              // 切換要顯示Alert
              showAlert.toggle();
              // 省略一部分操作。。。
          }.alert(isPresented: $showAlert){ // 這里 isPresented 綁定 showAlert變量
              Alert(
                  title: Text("提示"), // 頂部的標題
                  message: Text(res), // 彈窗的內容,需要是一個Text,調用了我們之前定義的提示文本
                  primaryButton: .default(Text("取消")){// 第一個按鈕是默認類型樣式,顯示取消
                      // 第一個按鈕點擊后的操作
                  },
                  secondaryButton: .destructive(Text("確定")){
                  
                  }
              )
          }

          以上的代碼運行后得到如下結果

          在這里插入圖片描述

          focus 到TextField

          以上的彈出框提示已經解決,那么接下來需要實現的是彈出之后哪一個字段沒填,就讓它自動聚焦,讓用戶可以直接填寫那個字段 添加如下的代碼

          // 是否聚焦到用戶名字段,注意@符號后面跟的是 FocusState,不然用到focused里面會報錯,并且不能設置默認值
          @FocusState private var focusUser:Bool;
          HStack{
              Text("用戶名")
              Spacer()
              TextField("請輸入用戶名",text:$userName)
                  .multilineTextAlignment(.center)
                  // 給用戶名字段的 focused 綁定 focusUser 變量
                  .focused($focusUser)
              }.padding(.all)
          }
          /// ... 省略部分代碼
          Button("登陸"){
              // 切換要顯示Alert
              showAlert.toggle();
              if(userName == ""){
                  // 如果沒填 userName 那么切換 focusUser 的值
                  focusUser.toggle()
              }
              // 省略一部分操作。。。
          }
          // 。。。 省略Alert部分

          此處的代碼實現了,如果在點擊登陸按鈕后用戶名沒有填,自動聚焦到用戶名字段

          在本頁面中,共有三個字段,可以定義三個變量的形式來進行判定聚焦

          但是如果有很多個字段的話就不合適了,我們可以使用枚舉的方式來進行定義

          以下貼出本頁面完整的代碼

          import SwiftUI
          
          struct ContentView: View {
              // 用戶名
              @State private var userName:String = "";
              // 密碼
              @State private var passWord:String = "";
              // 驗證碼
              @State private var code:String = "";
              // 提示語
              @State private var res:String = "請輸入。。。";
              // 提示語的顏色,color類型
              @State private var color:Color = .red;
              
              // 是否顯示彈窗標識
              @State private var showAlert:Bool = false;
              
              // 聚焦到哪一個字段?
              @FocusState private var focus:FocusField?;
              
              // 定義一個 Hashable 的枚舉,因為 focused 的第二個參數需要一個hashable的參數
              enum FocusField:Hashable{
                  case name;
                  case password;
                  case code;
                  case clear;
              };
              
              var body: some View {
                  // 整體縱向布局
                  VStack {
                      // 頁面標題,加粗,標題字體
                      Text("登陸界面").fontWeight(.bold).font(.title)
                      // 分隔占位,有點類似html中flex的flex:1,具體怎么用之后再看
                      Spacer()
                      // 一個橫向布局,表單項名稱-分隔占位-以及表單項
                      // 給一個 .all 的 padding,不然不好看
                      HStack{
                          Text("用戶名")
                          Spacer()
                          TextField("請輸入用戶名",text:$userName)
                              .multilineTextAlignment(.center)
                              // focused 綁定 focus變量,當該變量為 .name 時
                              .focused($focus,equals: .name)
                      }.padding(.all)
                      
                      HStack{
                          Text("密碼")
                          Spacer()
                          // secure field 跟 TextField基本類似,只是隱藏輸入的內容
                          SecureField("請輸入密碼",text:$passWord)
                              .multilineTextAlignment(.center)
                              .focused($focus, equals: .password)
                      }.padding(.all)
                      
                      HStack{
                          Text("驗證碼")
                          Spacer()
                          TextField("請輸入驗證碼",text:$code)
                              .multilineTextAlignment(.center)
                              .focused($focus, equals: .code)
                      }.padding(.all)
                      
                      Spacer()
                      // 提示語和button在一起
                      Text(res).foregroundColor(color)
                      
                      Button("登陸"){
                          showAlert.toggle();
                          color = .red
                          // button 的點擊事件action,做一個簡單的判斷
                          // 修改 res 的名稱,以及res的顏色
                          if(userName == ""){
                              res = "請輸入用戶名!";
                              return ;
                          }
                          if(passWord == ""){
                              res = "請輸入密碼!"
                              return ;
                          }
                          if(code == ""){
                              res = "請輸入驗證碼";
                              return ;
                          }
                          color = .green;
                          res = "登陸成功"
                          // 清空表單數據
                          userName = "";
                          passWord = "";
                          code = "";
                      }.buttonStyle(.bordered)
                      .alert(isPresented: $showAlert){
                          Alert(
                              title: Text("提示"),
                              message: Text(res),
                              primaryButton: .default(Text("取消")),
                              secondaryButton: .destructive(Text("確定")){
                                  if(res == "請輸入用戶名!"){
                                      // 沒有用戶名
                                      focus = .name
                                  }
                                  if(res == "請輸入密碼!"){
                                      focus = .password
                                  }
                                  if(res == "請輸入驗證碼!"){
                                      focus = .code
                                  }
                                  if(res == "登陸成功" || res == "請輸入。。。"){
                                      focus = .clear
                                  }
                              }
                          )
                      }
                  }
                  .padding()
              }
          }
          struct ContentView_Previews: PreviewProvider {
              static var previews: some View {
                  ContentView()
              }
          }

          運行得到以下的結果

          在這里插入圖片描述

          總結

          1. TextField 的 .focused($focus, .name) 使用
          2. enum 的基本使用
          3. Alert 的基本使用

          如今的這個紛雜世界里,影響我們視覺感官的因素太多了,于是乎才有了“聚焦”一說。作為人們與世界交流的重要窗口,網絡瀏覽器也不例外。這不,微軟基于Chromium的Microsoft Edge瀏覽器,就為我們提供了一種“聚焦模式”(Focus Mode),它能夠讓我們專注某個網頁的核心內容的閱讀,而屏蔽掉一切與此無關的彈出或閑雜信息。

          類似的“聚焦模式”(Focus Mode)新功能在Chrome中也即將出現。由于Windows 10將摒棄以EdgeHTML為核心的Edge瀏覽器,過渡到基于Chromium的Microsoft Edge,而基于Chromium的Microsoft Edge兼容Chromium內核瀏覽器的許多豐富功能,如大量的擴展插件,因此新的Edge會給用戶帶來極大的方便和廣闊的使用空間。

          首先下載并運行基于Chromium的Microsoft Edge瀏覽器測試版。注意,它與當前Windows 10中自帶的Edge各行其道,運行不會有沖突,生成的圖標也不會相互覆蓋。

          在地址欄中鍵入以下命令:

          edge://flags

          在搜索結果中查找以下標志(圖1):

          Focus Mode

          我們也可以將以下URL復制并粘貼到Microsoft Edge的地址欄中直達目標(圖2):

          edge://flags/#focus-mode

          在Microsoft Edge中,聚焦模式當前設置為Default,默認情況下該功能暫不啟用。單擊該下拉菜單并選擇Enabled啟用。點擊Relaunch重新啟動瀏覽器,才能應用更改(圖3)。

          下次啟動瀏覽器時,在網頁選項卡的右鍵菜單中,能看到一個Focus this tab新選項(圖4)。這將允許我們在聚焦模式下啟動網頁,從而在窗口中不使用任何其他選項的情況下讀取內容。這對專注于網上閱讀文章的用戶,或瀏覽那些老是彈出廣告或無關信息的網頁,將起到非常好的“凈化”作用。

          若需要返回到原來的網頁,只需在聚焦窗口的右鍵菜單中選擇Open browser window即可(圖5)。

           

          久沒參與魔方的發布工作了,今天提筆,有種莫名的生疏和惶恐,從下午四點半一直坐到現在,3個小時,刪刪寫寫。千言無語,千頭萬緒,千百般滋味涌上心頭,真的很懷念那些年每個周五定期一更的日子,簡單而快樂。

          2006年12月Vista優化大師發布第一個測試版,再到2009年9月發布魔方0.1,時光荏苒,便過去了9年。很多當初最早的那批朋友,現在都成了老友,有時候一覺醒來,發現軟媒的那個最老用戶群里的消息閃爍,由衷的開心,沒有什么比熟悉的感覺更有韻味。

          產品部的魔方一哥過來催文了,盡管他說理解我的心情啊什么的,但是為了保持一貫的不加班作風,我得直入主題了——

          魔方6.16正式版現在發布,“忍不住”還是讓產品組加了新功能,本來說好的要克制加新功能的沖動,重點大幅改進清理等原有常用功能的。

          這次忍不住要加的新功能,大家在標題里面已經看到了,就是一鍵提取微軟官方的精美聚焦壁紙(美化大師頂部加入了“聚焦壁紙”)。熟悉微軟的朋友都知道,Win10TH2開始系統增加了“Windows 聚焦”壁紙,大家在系統設置的“個性化”-“鎖屏設置”里面可以設置鎖屏的背景壁紙為“Windows 聚焦”,如下圖所示:

          這些微軟官方提供的鎖屏壁紙還是非常精美的,會自動的下載并切換,于是魔方便加入了提取功能,需要注意的是,這兒的提取,是提取的本機已經下載的,如果您之前沒有開啟過Windows聚焦功能,是抓不到的。這個抓取功能更方便的是讓大家隨時保存最新的。那過去的好看聚焦壁紙怎么辦?別著急,我們在軟件界面提供了所有Win10歷史聚焦壁紙下載大全的鏈接,很貼心的說。

          當然,這次魔方還有其他的有愛更新,例如清理大師的重復文件查找支持了批量選擇和刪除操作,例如設置大師中加入了讓資源管理器關閉mkv文件的預覽以防止卡頓,軟媒雷達、軟媒時間、WiFi助手、軟媒壓縮等都有界面和功能修復改進。

          具體更新內容的細節,請看下面的更新歷史吧!

          PS:按照慣例,軟媒魔方將在發布數十分鐘后才放開自動升級。

          一、軟媒魔方更新歷史

          軟媒魔方 6.1.6.0 正式版 - 2015年12月17日

          魔方主程序 6.1.6.0:

          新增:應用大全 - 增加旗魚瀏覽器PC版入口

          軟媒美化大師 3.6.9.0:

          新增:針對Win10 TH2增加Windows聚焦壁紙一鍵提取功能

          軟媒時間 3.1.3.0:

          修正:界面 - 多云和陰天的小圖標弄反的問題修正:界面 - 系統開啟高DPI的時候,窗口太小的問題

          軟媒清理大師 3.7.3.0:

          新增:隱私清理 - Office 2016打開歷史記錄清理

          改進:重復文件查找 - 支持批量操作改進:注冊表清理 - 屏蔽注冊表清理功能

          修正:隱私清理 - Office 2013打開歷史記錄清理不掉的問題

          軟媒設置大師 3.6.8.0:

          新增:資源管理器 - 關閉MKV視頻預覽

          軟媒雷達 6.0.7.0:

          修正:本機信息 - 讀取IE的Flash Player版本號錯誤的問題修正:界面 - 系統開啟高DPI的時候,窗口太小的問題

          軟媒IE管理大師 1.9.8.0:

          修正:界面 - 系統開啟高DPI的時候,窗口太小的問題

          軟媒WiFi助手 1.1.8.0:

          修正:穩定性 - 啟動WiFi助手時可能發生的崩潰問題

          軟媒壓縮 1.1.5.0:

          修正:界面 - 系統開啟高DPI的時候,窗口太小的問題

          二、為什么大家都在用魔方?

          軟媒魔方好不好?軟媒魔方有什么用?為什么要用軟媒魔方?

          先列出一些基本組件功能:

          1、清理大師:一鍵清理、深度清理、注冊表清理、字體清理,還有隱私清理。。。難道你不需要?

          2、美化大師:改系統字體、DIY win7開始按鈕、設置開機動畫、破解系統主題、修改系統聲音。。。怎么個性怎么玩,美化大師全搞定!

          3、優化大師:一鍵加速、添加、刪除系統啟動項,讓你輕松掌控系統進程的開啟!

          4、軟媒時間,軟媒全球首創獨創的創意,任務欄時間區加入農歷、天氣等顯示,不占任何額外空間,超NB!

          5、軟媒桌面:哈,Windows系統里多了類似蘋果Mac OS X的快捷欄,方便大發了。

          6、軟件管家:精選裝機必備軟件大全,下載杠杠的……

          7、系統雷達:任務欄窗口+桌面懸浮窗自由隨意選擇,實時監控網絡流量、CPU、內存占用、磁盤讀寫,簡單、清晰、方便!

          8、U盤啟動:一鍵制作U盤系統安裝盤,裝機還是PE維護簡直輕松到極點!

          9、硬盤裝機:僅需兩步,輕松幫你重裝系統,win7、win8、win10,想裝什么裝什么,你肯定需要!

          10、WiFi共享助手:超級簡單,打開軟件,一鍵開啟熱點,立馬擺脫手機流量不夠用的困擾!!親,你的流量還夠用嗎?

          還有啥?上面列出的連一半功能都不到,還有網速測試、磁盤大師、文件校驗、文件解鎖、文件分割合并、文件粉碎……等等,還有好多功能,你能想到的基本都有!

          軟媒魔方現在已經有4000萬用戶下載使用,好用沒得說!

          三、軟媒魔方軟件截圖

          只需一鍵,智能模式讓你可以放心的把軟媒魔方介紹給你的老婆、小姨子和表妹……

          右上角輕松切換到專業模式,熟悉中包含著科學改進后的經典布局

          軟媒時間,風云變幻-不占用任何額外空間,萬年歷天氣鬧鐘記事本在任務欄時間區完美呈現;

          軟媒桌面,好玩好看-喜歡的鼠標拖進來,不愛的鼠標拖出去,桌面干凈整潔靈動驚艷;

          軟媒雷達,實時偵探-把握您愛機的每一跳脈動,精確掌控系統軟硬件的占用資源;

          軟件管家,純凈精干-編輯精選裝機必備的500款最常用軟件,一鍵安裝絕無插件;

          四、軟媒魔方下載信息

          初級用戶解惑:安裝包和綠色版有什么不同?安裝版下載后直接雙擊運行即可進入向導安裝,方便快捷。綠色版是ZIP壓縮格式,直接解壓到你指定的文件夾路徑下。

          軟媒 - 存在,創造價值。

          微信搜索“IT之家”關注搶6s大禮!下載IT之家客戶端(戳這里)也可參與評論抽樓層大獎!


          主站蜘蛛池模板: 岛国精品一区免费视频在线观看| 欧洲亚洲综合一区二区三区| 亚洲色一区二区三区四区| 日韩精品国产一区| 国产99久久精品一区二区| 亚洲欧洲∨国产一区二区三区| 女女同性一区二区三区四区| 无码人妻视频一区二区三区 | 麻豆文化传媒精品一区二区| 久久99精品波多结衣一区| 日韩电影一区二区| 中文字幕一区视频一线| 免费一区二区三区在线视频| 合区精品久久久中文字幕一区| 国产在线观看一区二区三区精品 | 亚洲码一区二区三区| 久久婷婷久久一区二区三区| 黑人大战亚洲人精品一区| 国产成人久久精品麻豆一区| 无码中文字幕乱码一区| 国产精品福利一区| 区三区激情福利综合中文字幕在线一区亚洲视频1| 成人中文字幕一区二区三区| 在线|一区二区三区四区| V一区无码内射国产| 国产一区二区四区在线观看 | 国产成人一区二区精品非洲| 人妻无码一区二区视频| 精品无码一区二区三区爱欲 | 激情内射亚州一区二区三区爱妻| 国产精品区一区二区三在线播放 | 亚洲一区二区三区成人网站 | 日韩免费一区二区三区| 丝袜无码一区二区三区| 中文字幕人妻AV一区二区| 一区二区日韩国产精品| 亚洲AV无码片一区二区三区| 久久一区不卡中文字幕| 中文字幕VA一区二区三区| 夜夜精品无码一区二区三区| 国产高清一区二区三区四区|