1. 程式人生 > >iOS如何完美簡單實現UITableView索引的放大懸浮提示View顯示

iOS如何完美簡單實現UITableView索引的放大懸浮提示View顯示

一,問題描述:在好多app上面,類似通訊錄的名字都是按字母分組的,索引的時候在UITableView中間會顯示一個浮動的VIew顯示當前索引的字母,如何實現這一功能?

二,實現思路,第一種,簡單粗暴的方式是自定義UITableView的索引,但是比較麻煩。第二種,在UITableView原生的索引上面改進,但是會遇到坑,應為UITableView沒有開放索引檢視。

三,首先說說第一種方法吧,這是在早期專案裡面用到的,雖然笨拙但是能達到效果。

        1,自定義YXTableViewIndexView索引,固定寬度20,這個可以調整,高度就根據有多少個索引字元來計算,當傳入一個索引字元陣列的時候就重新整理這個檢視,顯示出索引字元,

        2,在YXTableViewIndexView中新增一個提示索引的放大浮動View,位置相對於UITableView的中心位置,這個根據需求調整。

        3,YXTableViewIndexView新增點選和拖拽手勢,當手指在YXTableViewIndexView上滑動和點選時顯示浮動VIew,並顯示當前索引字元,手勢完成時影藏浮動View。

四,重點說一下第二種方法。

       1,UITableView的索引只有另個索引方法sectionIndexTitlesForTableView和sectionForSectionIndexTitle,第一個方法返回一個String

陣列,TableView就會依次顯示在索引上。第二個方法是當點選到索引的第index個索引時,跳到哪一組。實現完這兩個代理方法,TableView索引的功能就做完了,非常簡單。

       2,思考如何實現浮動View呢,首先需要找到這個原生索引檢視,在這個檢視上新增一個浮動View來顯示當前的索引字元,通過檢視UITableView的自檢視陣列中,我發現了索引名叫UITableViewIndex的東西。

      3,拿到UITableViewIndex這個索引就好好辦了,我可以在這上面做很多的操作,所以我就在它上面添加了一個label來顯示當前索引的字元,但是遇到另一個問題,那這個浮動label怎麼控制顯示和隱藏呢,因為當手指沒有在索引上的時候或者索引結束時需要隱藏這個浮動label,但是現在我不知道什麼時候索引結束,換句話說我我沒法知道手指在索引上面的狀態,於是我想到在UITableViewIndex新增點選手勢和滑動Pan手勢,結果勉強可以達到控制影藏顯示浮動label的效果,但是效果不好,時而不時的實效,應為我加的收拾和UITableViewIndex本身實現的手勢有衝突。

     4,鑑於往UITableViewIndex新增手勢的方式不能很好的控制浮動VIew的隱藏和顯示,那麼我就想利用UITableViewIndex本來的手勢操作,我列印UITableViewIndex手勢陣列,但是並沒有發現任何實現的手勢,我就想到UITableViewIndex實現的是touchesBegan,touchesMoved系列根本touches手勢,於是解決方法有了,我知道攔截到UITableViewIndex的這幾個方法就能知道手指在UITableViewIndex上的狀態,從而就能正確的隱藏和顯示浮動View了,如何攔截這幾個方法就很簡單了,這是runtime的黑魔法,用現成的輪子Aspect就行了,最後發現完美簡單的解決了這個問題。

五,效果圖:


相關推薦

iOS如何完美簡單實現UITableView索引放大懸浮提示View顯示

一,問題描述:在好多app上面,類似通訊錄的名字都是按字母分組的,索引的時候在UITableView中間會顯示一個浮動的VIew顯示當前索引的字母,如何實現這一功能? 二,實現思路,第一種,簡單粗暴的方式是自定義UITableView的索引,但是比較麻煩。第二種,在UITa

webapp在ios簡單實現滑動,回彈,加速等效果

-webkit-overflow-scrolling來自safari原生控制元件的實現,工作原理是:在有這個屬性的容器上,系統會建立了一個uiscrollview,應用於該元素並將之作為渲染物件,從而為我們實現體驗流暢的觸屏滑動 在Ios上的表現結果令人十分滿意,並且網

iOS Swift 簡單實現Loading動畫

最近突然對動畫特別感興趣,尤其是最常見的載入動畫,百度了一圈發現全是OC程式碼,這讓我這個習慣寫swift的假iOS開發很是鬱悶。 在網上扒的過程中看到一個挺簡單的一個載入動畫,看了一下原作者的程式碼,學習了一下原作者的思想,也感謝那位坐著哈。。。 接下來看

webView 之 webapp在ios簡單實現滑動,回彈,加速等效果

webkit-overflow-scrolling來自safari原生控制元件的實現,工作原理是:在有這個屬性的容器上,系統會建立了一個uiscrollview,應用於該元素並將之作為渲染物件,從而為我們實現體驗流暢的觸屏滑動 在Ios上的表現結果令人十分滿意,並且網頁

Lucene簡單實現建立索引以及查詢

package com.rdz.test; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.Ana

簡單實現前端選擇上傳圖片並顯示略縮圖

效果 實現程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改資訊</title> <sc

簡單實現修改jqgrid的翻頁欄顯示效果

沙漠漁溏--時間小記:2018年8月2日 11:29:12         從今年五一開始接觸軟體開發行業,看到公司做的web程式應用很多jqgrid外掛,說句實話好多地方感覺好醜 話不多說先上程式碼再看演示(寫的很糙,看網上沒有,僅做參考吧) js檔案 /*** *

簡單實現自定義橫向滾動選擇View

今日科技快訊 昨日有人舉行記者招待會,實名舉報頁遊運營平臺4399大股東蔡文勝涉嫌偷逃國家稅款3.6億元人民幣。舉報人稱4399隱瞞重大事實,意圖欺騙上市。而蔡文勝迴應稱2013

安卓開發 簡單實現自定義橫向滾動選擇View : HorizontalselectedView

一、需求: 今日產品經理讓在產品裡面加了個橫向選擇的功能,控制元件樣子大致要求為: 網上找了好久沒找到此控制元件,只能自己動手寫了,很適合新手練習自定義View,並貢獻給大家,效果如下: 其實很多滾輪控制元件也只是這個簡單控制元件 組合一下就可以了

iOS事件攔截(實現觸控任意位置隱藏指定view)

最開始的想法是當這個選擇器(selectorView)展開的時候,在當前螢幕上加入一個鋪滿整個螢幕的透明button來攔截所有的觸控事件。 可是這個方案實現起來非常麻煩,也不優雅,而且發現button攔截不到scrollView的滑動事件,所以決定放棄。 後來經過經理提醒,在UIApplication下有一

IOS-小項目(餓了麽 網絡部分 簡單實現

分享 tab 程序啟動 下拉刷新控件 ram pen address register 單例 在介紹小項目之前,在此說明一下此代碼並非本人所寫,我只是隨筆的整理者。 在介紹之前先展現一下效果圖。 看過效果圖大家應該很熟悉了,就是餓了麽的一個界面而已,值得註意的是,實現時並

iOS開發UI篇—實現UITableview控件數據刷新

ani titles plist文件 mes 模型 source dequeue intro 自動 iOS開發UI篇—實現UITableview控件數據刷新 一、項目文件結構和plist文件 二、實現效果 1.說明:這是一個英雄展示界面,點擊選中行,可以修改改行英雄的名稱

iOS開發UI篇—UITableview控件簡單介紹

object des car 頭部 cell 簡單 過程 ios nta iOS開發UI篇—UITableview控件簡單介紹 一、基本介紹 在眾多移動應?用中,能看到各式各樣的表格數據 。 在iOS中,要實現表格數據展示,最常用的做法就是使用UITableView

iOS簡單實現toastView

自定義提示 /** 獲取指定寬度width的字串在UITextView上的高度 @param textView 待計算的UITextView @param width 限制字串顯示區域的寬度 @return 返回的高度 */ - (float)heightForStrin

Swift右下角懸浮按鈕簡單實現

最近想在自己的專案中新增一個右下角的懸浮按鈕,這種按鈕最初是在安卓中興起來的,但是再很多iOS App中都能看到它身影, 下面就推薦一個比較適合新手使用的懸浮按鈕例子ActionButton。(在GitHub上翻出來的) GitHub:https://github.com/lou

簡單實現點選圖片放大的功能

背景:想在app中加上點選縮圖放大的效果,但是不想匯入大量的JS ,也無需哪些複雜的外掛,於是自己手寫了一個很簡單的實現,在這裡記下來。 程式碼很簡單,還有很多優化空間,時間有限,就沒有優化了 1 . 先準備大圖的位置 大圖是fixed於整個介面,只修改其中的s

iOS系統鍵盤上的輸入框簡單實現

#import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface WYPSeparateSetCodeView : UIView @property (weak, nonat

ios swift 左側抽屜簡單實現

var leftView: UIView? var minX: CGFloat? var midX: CGFloat? var maxX:CGFloat? /* 抽屜 */ func drawerView(){

iOS簡單瀑布流的實現

前言 超簡單的瀑布流實現,這裡說一下筆者的思路,詳細程式碼在這裡 效果演示 實現思路 collectionView能實現各中吊炸天的佈局,其精髓就在於UICollectionViewLayout,因此我們要自定義一個layout來繼承系統的UICollectionViewLayout,所有工作都在這個

iOS --- 使用GPUImage實現簡單濾鏡效果

GPUImage 是一個基於 GPU 影象和視訊處理的開源 iOS 框架。由於使用 GPU 來處理影象和視訊,所以速度非常快. 除了速度上的優勢,GPUImage 還提供了很多很棒的影象處理濾鏡,但有時候這些基本功能仍然無法滿足實際開發中的需求,GPUImage