iOS Today Extension/widget編程小記

來源:互聯網
上載者:User

iOS Today Extension/widget編程小記

從iOS8開始,下拉的”今天”裡,應用可以添加自己的小widget,就是這樣的東西:

這個東西在Android裡叫widget,不過在iOS中我們叫它Today Extension,因為它是iOS中眾多種類的extensions中的一種。

Extensions有很多種,Today Extension之外,還有包括Share、Action、Photo Editing、Document Provider、Custom Keyboard、Watch App這些;其中一些很熟悉,像Watch App,另外一些可能不太熟悉;今天主要來研究Today Extension。<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsrXz8ijrMjnus60tL2o0ru49lRvZGF5IEV4dGVuc2lvbsTYo7+63LzytaWjrNTa0tHT0LXEz+7Ev8Dvo6zU2lhjb2RlwO+jrNGh1PFGaWxlLU5ldy1UYXJnZXQtQXBwbGljYXRpb24gRXh0ZW5zaW9uLVRvZGF5IEV4dGVuc2lvbqOs0MK9qNK7uPZ0YXJnZXSjrMjnz8LNvMv5yr6hozxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="http://www.bkjia.com/uploads/allimg/150903/04254S110-1.png" title="\" />
這樣,一個Today Extension就建好啦。Run一下(就是那個new name,一個空的Today Extension):

是的,建立一個Today Extension就是這麼簡單。對於開發人員來說,一個Today Extension其實就是一個有點兒特殊的UIViewController;我們可以向這個View Controller中添加subviews,執行任務,等等。不過在開發的過程中,還有一些常見的問題:

怎麼跳轉到主App?

對於Today Extension來講,主App的官方名稱叫Containing App;widget並沒有什麼特殊的方式跟Containing App互動,只能跟其它App一樣,調用URL Scheme來跳轉到Containing App中,執行一些特定操作。

如何確定Today Extension的高度和寬度?

對於Today Extension來說,它的寬度是不能變的,就是螢幕的寬度;而它的高度可以根據內容動態變化。蘋果推薦我們使用auto layout,這樣Today Extension的高度就可以自適應變化;如果不用auto layout的話,還可以調用

self.preferredContentSize = CGSizeMake(0,100);

來將其高度定為100;

如何定時/下拉時重新整理?

定時重新整理很簡單,用NSTimer就可以,只是要注意dealloc的時候,將NSTimer銷毀;

對於下拉重新整理,我們就要先搞清楚,下拉的時候,都調用了哪些方法。剛才講了,Today Extension其實就是一個View Controller,因此它的生命週期,也是viewDidLoad-viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear-dealloc這個路子。也就是說,每次下拉展示Today Extension的時候,都會將這個流程走一遍,所以我們只要在viewDidLoad裡調用最新結果就可以了。

如何修改Icon旁邊的名字?
預設的名字都是Containing App的Bundle Name,不過我們可以修改這個名字,方法:在Info.plist裡,修改Bundle display name。

蘋果對Today Extension的建議:蘋果認為,Today Extension就是一個執行簡單操作、介面也簡單的地方,不應當有複雜的介面、複雜的操作。因此最好不要在這裡搞的很複雜,否則可能會在提交審核的時候被拒掉。

一些需要注意的地方:

Today Widget是不支援鍵盤輸入的,所以諸如UITextField、UITextView之類的控制項不應當放進來。

一般情況下,要避免使用UIScrollView,因為Today View本身就是一個scroll view,這樣的話會讓使用者困惑,在操作的時候容易誤操作。

Today Extension不是正常的App,因此有一些限制:

不能使用UIApplication這個類;

不能使用某些標記了NS_EXTENSION_UNAVAILABLE的API,以及一些諸如Health Kit、Event Kit的framework;

不能擷取相機、麥克風;

不能長時間運行background tasks;

不能通過AirDrop得到資料,但可以向AirDrop發送資料;

以上就是關於Today Extension的普通問題,還有一些高端的情況,比如增加view時重新整理高度、確定extension在特定情況下出現/特定情況下消失,等等情況,還有待進一步研究。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.