日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Button简介

發布時間:2023/12/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Button简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    • Button是如何工作的
    • Button的類型
      • 普通按鈕
      • 粘性按鈕
      • 單選按鈕及復選框
    • 普通按鈕的使用
    • 使用復選框
      • 標準復選框
      • 圖標復選框
    • 單選按鈕
      • 標準單選按鈕
      • 圖標單選按鈕
    • 查詢按鈕矩陣
    • 設置按鈕邊框的外觀
    • 設置按鈕標題
    • 設置按鈕圖標
    • 隱藏按鈕
    • 設置按鈕為默認樣式
    • 設置按鈕快捷鍵
    • 子類化NSButton

Button是一個用戶界面對象,在單擊時向目標發送操作消息。

本文介紹Cocoa提供的各種按鈕的不同之處以及如何使用它們。

Button是如何工作的

Button遵循target-action設計模式,它是一個用戶界面對象,在單擊時向目標發送操作消息。關于此設計模式的更多信息,請查看 Concepts in Objective-C Programming中的Target-Action。

大多數按鈕的工作是由NSButtonCell處理的,一旦NSButtonCell的視圖被點擊并捕獲到鼠標按下的事件后,NSButtonCell的實例發送它的動作消息給目標對象,但是只要鼠標光標在Button cell內部并保持按下狀態也可以持續發送動作消息。Button cell的按壓狀態可以通過多種高亮方式顯示。比如,有邊框的按鈕單元格可以出現在屏幕上,或者在按下按鈕單元格時,圖像或標題可以更改為另一種形式。

NSButtonCell對象必須使用NSControl子類的實例,如果你需要一個按鈕,如push按鈕,使用包含單個NSButtonCell實例的NSButton對象;如果需要一組相關的按鈕,例如一組開關或radio按鈕,則使用包含幾個NSButtonCell實例的NSMatrix對象。

NSButton和NSMatrix都提供了一個控制視圖,然而,雖然NSMatrix要求您直接訪問NSButtonCell對象,但是NSButton的大多數方法對于NSButtonCell中相同聲明的方法是“隱藏”的,(也就是說,NSButton方法的執行會自動為你調用相應的NSButtonCell方法,無需關心NSButtonCell的存在。)唯一沒有覆蓋的NSButtonCell方法與用于顯示快捷鍵的字體以及高亮或顯示NSButton狀態的特定方法有關(最后這些通常與NSButton的setButtonType:方法一起設置)。

Button的類型

Button的類型決定了它的行為,當按壓時如何高亮顯示以及是否顯示其狀態,button的類型可以歸納為三類:

  • 普通按鈕
  • 粘性按鈕
  • 單選按鈕及復選框

通過setButtonType設置按鈕類型。

普通按鈕

這些按鈕主要用于觸發動作,因為他們不顯示自己的狀態。這類按鈕在鼠標按下時改變他們的顯示并且在鼠標抬起時返回他們原始的狀態。

  • 要讓NSButton控制按鈕被按下的外觀,使用NSMomentaryPushInButton(在Xib的按鈕inspector中稱為“Mementary Push”),當鼠標按下按鈕時,按鈕似乎是按進去的。

    這里有一個NSMomentaryPushInButton按鈕的例子,帶有NSRoundedBezelStyle風格的邊框,在正常和按下時的外觀:

    這是一個帶有NSThickerSquareBezelStyle樣式的NSMomentaryPushInButton按鈕的例子。邊框樣式NSRegularSquareBezelStyle和NSThickSquareBezelStyle類似。

  • 為了自己控制按鈕的外觀,使用NSMomentaryChangeButton(在Xib中稱為“Momentary Change”)。當鼠標按鈕按下時,它將顯示為替換圖片和標題,當鼠標釋放后,它將顯示為正常的圖片和標題。如果沒有設置替換圖片或者按鈕標題,它的外觀不會有任何變換。

粘性按鈕

此類按鈕顯示他們的狀態,并且在按下后似乎會粘住。點擊一次后,它將會保持按下狀態直到下一次點擊。

  • 要讓NSButton控制按鈕被按下的外觀,使用NSPushOnPushOffButton(xib中稱為“Push On/Push Off”)。按鈕被按下后,按鈕似乎是按進去的,再次點擊后按鈕彈起。彈出的外觀用于關閉狀態(NSOffState),而壓入的外觀用于打開狀態和混合狀態(NSOnState和NSMixedState)。這對于顯示應用程序中某些內容的狀態的按鈕(例如,顯示所選文本是否為黑體的按鈕)非常有用。
  • 要控制按下按鈕的外觀,請使用NSToggleButton(在Interface Builder的按鈕檢查器中稱為“切換”)。單擊一次后,按鈕會顯示它的替代圖像和標題。再次單擊后,按鈕會顯示其正常的圖像和標題。如果沒有替代的圖像或標題,按鈕的外觀不會改變。正常的圖像和標題表示off狀態(NSOffState),備用的圖像和標題表示on狀態和混合狀態(NSOnState和NSMixedState)。這對于在兩個動作(例如,停止和開始)之間切換的按鈕非常有用。

如果想要一個按鈕顯示所有三種狀態的不同外觀,必須自定義NSButton。

單選按鈕及復選框

這些按鈕顯示應用程序中的狀態,它們是NSToggleButton的特殊版本,具有系統定義的圖片。

  • 要在兩個選項中進行選擇,請使用 NSSwitchButton按鈕,它看起來像一個復選框。這種類型的按鈕可以在Interface Builder中作為單獨的選項板使用。
  • 要在兩個以上的選項中進行選擇,請使用NSRadioButton按鈕矩陣。矩陣和單選按鈕一起工作,以確保每次只打開一個按鈕。這種類型的按鈕可以在Interface Builder中作為單獨的選項板項使用。

    更改這些按鈕使用的圖像可能會導致不可預測的結果,如果想要一個具有定制外觀的開關按鈕或單選按鈕,可以定制一個切換按鈕或自定義NSButton。

雖然復選框和單選按鈕可以顯示所有三種狀態的不同圖像,但其他類型的按鈕卻不能。

普通按鈕的使用

普通按鈕執行按鈕名所描述的動作,通常,它是一個圓角矩形,里面包含了它的名字。例如,這個按鈕可能出現在一個對話框中,該對話框可以找到文檔中的文本。

在Interface Builder中創建按鈕是最簡單的。您還可以通過編程方式創建一個NSButton實例,其類型為NSMomentaryPushInButton、NSNoImage的圖像位置和NSRoundedBezelStyle的邊框。

此類按鈕也可以是一個圖標按鈕,也就是說,這個按鈕主要由其圖標識別,很少或沒有文本。它是長方形的,像這樣:

您可以使用Interface Builder或代碼方式創建圖標按鈕。如果使用的是Interface Builder,從一個普通的按鈕開始。如果您以代碼方式創建它,那么創建一個NSButton實例,然后將其類型設置為NSMomentaryPushInButton,其圖像位置設置為NSImageOnly,其邊框類型設置為正方形邊框類型。最后,設置圖像為您想要的。

注意:文本按鈕上可以有一個小圖像,圖標按鈕可以有一個標簽。最重要的問題是什么最突出。如果是文本,將其視為文本按鈕。如果是圖像,將其視為圖標按鈕。

您還可以有一個在兩個狀態之間切換的按鈕,每個狀態都有自己的標題和圖像。例如,一個按鈕可以在開始和停止之間切換。您可以和使用Interface Builder或代碼創建普通按鈕相同的方式創建一個按鈕,只需將按鈕類型更改為NSToggleButton。然后給按鈕一個可選標題和圖像以及一個常規標題和圖像。該按鈕首先顯示常規標題和圖像,然后在用戶單擊后顯示替換的標題和圖像。

使用復選框

一個復選框展示應用中的設置,復選框的另一個名字叫開關按鈕,用一行文本標識一個復選框。

使用NSButton的state屬性去設置一個復選框的狀態。可能的狀態為NSOnState、NSOffState和NSMixedState。如果按鈕是關閉的,則框是空的,反之,該框里面有個對號;如果按鈕是混合狀態,則框里有一個破折號。

標準復選框

Interface Builder是創建復選框最簡單的方式。你也可以使用代碼創建,繼承自NSButton,其類型定義為NSSwitchButton。

不同于一組單選按鈕,復選框中可以選擇多個選項。這組按鈕顯示所有選中的字符都是粗體,沒有斜體,還有一些是下劃線:

圖標復選框

你也可以有一個復選框,它是一個圖標按鈕;也就是說,這是一個主要由其圖標識別,很少或沒有文本,如果按鈕是關閉的,它似乎是突出的;如果按鈕是開著的,它似乎是按進去的。(圖片按鈕不能顯示混合狀態。)

您可以在Interface Builder或代碼中創建圖片復選框,如果您使用的是Interface Builder,在普通按鈕的基礎上設置;如果以代碼方式創建,則需要創建NSButton的實例。然后通過將其類型設置為NSPushOnPushOffButton、圖像位置設置為NSImageOnly、邊框類型設置為正方形類型來更改它,然后設置圖像為你想要的即可。

單選按鈕

單選按鈕顯示應用程序中某些內容的設置,并且是一個組的一部分,其中一次只能有一個按鈕是開啟的,使用一組單選按鈕在幾個相互排斥的選項中進行選擇。

標準單選按鈕

標準的單選按鈕是一個小圓圈,后面跟著一行文本。如果按鈕關閉,圓圈是空的;如果按鈕是打開的,圓圈被填充;如果按鈕是混合狀態,圓圈有一個破折號。
例如,這組按鈕顯示所有選中的對象都是綠色的:

這個組顯示部分選中的對象是紅色的,部分是綠色的:

一組單選按鈕由一個NSMatrix對象實現,該對象包含幾個NSButtonCell實例,并具有NSRadioModeMatrix的跟蹤模式。每當單擊矩陣的某個按鈕時,矩陣就會關閉先前選擇的按鈕并打開新單擊的按鈕。
在Interface Builder中創建一組開關按鈕是最容易的。您還可以通過代碼的方式創建一個NSMatrix對象并初始化它(在調用initWithFrame:mode:prototype:numberOfRows:numberOfColumns:),使用原型單元格和NSRadioModeMatrix的跟蹤模式。對于原型對象,使用NSRadioButton類型創建一個NSButtonCell對象。清單1說明了如何進行此操作。
清單1:通過代碼創建單選按鈕集

- (void)awakeFromNib {NSButtonCell *prototype = [[NSButtonCell alloc] init];[prototype setTitle:@"Watermelons"];[prototype setButtonType:NSRadioButton];NSRect matrixRect = NSMakeRect(20.0, 20.0, 125.0, 125.0);NSMatrix *myMatrix = [[NSMatrix alloc] initWithFrame:matrixRectmode:NSRadioModeMatrixprototype:(NSCell *)prototypenumberOfRows:3numberOfColumns:1];[[[self window] contentView] addSubview:myMatrix];NSArray *cellArray = [myMatrix cells];[[cellArray objectAtIndex:0] setTitle:@"Apples"];[[cellArray objectAtIndex:1] setTitle:@"Oranges"];[[cellArray objectAtIndex:2] setTitle:@"Pears"]; }

圖標單選按鈕

單選按鈕也可以是一個圖標按鈕;也就是說,這是一個主要由其圖標識別,很少或沒有文本。如果按鈕是關閉狀態的,那么它似乎是卡在里面的;如果按鈕是開著的,它似乎是按進去的。(圖標按鈕不能顯示混合狀態。)
您可以在Interface Builder或代碼方式中創建一組圖標單選按鈕。如果您使用的是Interface Builder請從一個普通按鈕開始;如果以代碼方式創建,則創建一個按鈕矩陣。然后將矩陣的跟蹤模式改為NSRadioModeMatrix。將按鈕的類型更改為NSPushOnPushOffButton,它們的圖像位置更改為NSImageOnly,它們的邊框類型更改為正方形邊框類型。最后設置他們的圖片為你想要的。

查詢按鈕矩陣

一組單選按鈕或復選框以編程方式是一個NSMatrix對象,其組成對象是NSButtonCell對象。矩陣對象是一種特殊的控件。每個單元格都可以指定自己的目標對象和操作選擇器。另外,NSMatrix可能有自己的目標和操作選擇器。(有關矩陣對象的目標操作的更多信息,請參閱矩陣編程指南。)
要找到用戶選擇的單選按鈕或復選框(在用戶單擊時),可以為矩陣中的每個單元格指定目標和不同的操作選擇器,然后實現相應的操作方法。然而,在單選按鈕或復選框矩陣中查詢當前選擇的更有效的方法是為NSMatrix對象本身實現目標操作,并且在操作方法中確定現在選擇了哪個單元(或單元)。這個的NSMatrix方法是selectedCell和selectedCells。
清單1展示了一個action方法的實現,該方法響應單選按鈕矩陣中的選擇。
清單1 查詢所選的radio-button單元格的矩陣對象

- (IBAction)findSelectedButton:(id)sender { // sender是一個矩陣對象NSButtonCell *selCell = [sender selectedCell];NSLog(@"Selected cell is %d", [selCell tag]); }

這個代碼片段說明了在處理矩陣中的單元格選擇時可以應用的另一種技術。可以為矩陣中的每個單元格分配數字標記來識別它,然后在處理選擇時查詢這些標記值。

設置按鈕邊框的外觀

可以通過改變按鈕的形狀和陰影來控制它的邊框。注意,如果isborder返回NO,則邊界不會出現。使用setborder:改變它的值。
要更改邊框的形狀,請使用setBezelStyle:改變按鈕的邊框類型。有兩大類邊框類型。

  • 如果您的按鈕主要通過文本標識,那么使用NSRoundedBezelStyle。它為文本按鈕使用適當的邊框樣式,它是一個圓角矩形,如下所示:
  • 如果您的按鈕主要由圖標標識,那么使用NSRegularSquareBezelStyle, NSThickSquareBezelStyle或NSThickerSquareBezelStyle。這些類型使用帶有邊框的矩形按鈕。小樣式具有2像素的邊框;中等樣式有3像素的邊框;大樣式有4像素的邊框。三種類型如下所示:

設置按鈕標題

一個按鈕可以有兩個與之相關的標題:普通標題和交替標題。如果按鈕類型是NSMomentaryPushInButton、NSPushOnPushOff按鈕、NSMomentaryLightButton或NSOnOffButton,則只顯示正常的標題。如果按鈕類型是NSMomentaryChangeButton或NSToggleButton,則當按鈕的狀態為off (NSOffState)時將顯示正常標題,當按鈕的狀態為on或mixed (NSOnState)時將顯示備用標題。或NSMixedState)。如果你想要一個按鈕顯示所有三種狀態的不同標題,你必須子類化NSButton。
如果希望標題包含純文本,請使用setTitle:設置普通標題和setAlternateTitle:設置備用標題。如果希望標題包含樣式文本(例如,斜體或粗體),請使用setAttributedTitle:和setAttributedAlternateTitle:。
要設置標題相對于按鈕圖像的定位方式,使用setImagePosition:,在設置按鈕圖像中描述。如果沒有圖片,標題將在按鈕內水平和垂直居中。如果標題位于圖像的上方、下方或重疊部分,則標題將在按鈕內水平居中。要隱藏標題,使用setImagePosition:帶有NSImageOnly的參數。
要設置標題的字體,發送setFont:到按鈕的按鈕單元格。
如果想讓按鈕在鼠標移動到標簽上時顯示其標題,需要使用Tool Tips。

設置按鈕圖標

一個按鈕可以有兩個與之相關聯的圖像:普通圖像和交替圖像。如果按鈕類型是NSMomentaryPushInButton、NSPushOnPushOff按鈕、NSMomentaryLightButton或NSOnOffButton,則只顯示正常的圖像。如果按鈕類型為NSMomentaryChangeButton或NSToggleButton,則正常圖像在按鈕狀態為off時顯示(NSOffState),而備用圖像在按鈕狀態為on或mixed (NSOnState)時顯示。或NSMixedState)。如果你想要一個按鈕顯示所有三種狀態的不同圖像,你必須子類化NSButton。(盡管開關按鈕和單選按鈕可以顯示所有三種狀態的不同圖像,但這個功能沒有公共接口。)
要設置正常的圖像,使用setImage:。要設置備用映像,使用setAlternateImage:。

注意:如果按鈕是復選框或單選按鈕,不要改變其圖像。這些按鈕的圖像是系統定義的,更改它們可能導致不可預知的結果。如果您想要一個具有定制外觀的開關按鈕或單選按鈕,可以定制一個切換按鈕(類型為NSToggleButton的按鈕)或NSButton子類。
要為按鈕的圖像設置位置,使用setImagePosition:,下面的值之一。默認是NSNoImage

NSNoImageNSImageOnlyNSImageOverlaps
NSImageLeftNSImageRight
NSImageBelowNSImageAbove

隱藏按鈕

有兩種方法可以從視圖中隱藏按鈕:它可以是完全透明的,也可以只在鼠標經過它時才顯示它的邊框。

  • 要使按鈕透明,使用setTransparent:。一個透明的按鈕跟蹤鼠標并發送它的動作,但不繪制自己。這對于將屏幕上的區域敏感化非常有用,這樣當該區域收到鼠標單擊時,操作就會發送到目標。
  • 要讓一個按鈕顯示其邊框,只有當它處于活動狀態并且鼠標在它上面時,才可以使用setshowsborderonly目地:。其余的按鈕的組件總是繪制。下面是一些按鈕的例子,這些按鈕只在鼠標移動到它們上面時才顯示它們的邊框:

設置按鈕為默認樣式

如果按鈕具有NSRoundedBezelStyle 邊框類型,您可以將其標記為默認按鈕。默認按鈕是選中樣式的,當用戶按下Return時調用其操作消息。它看起來像這樣:

若要將按鈕標記為默認值,用 setKeyEquivalent:方法將其快捷鍵設置為Return。

[myButton setKeyEquivalent:@"\r"];

可以在Interface Builder中設置快捷鍵,默認按鈕有一個在它周圍繪制的粗輪廓,在按鈕的邊界之外,界面設計應該考慮到額外的空間。

設置按鈕快捷鍵

一個按鈕可以有一個等效的鍵,這樣當用戶按下那個鍵時,按鈕就會響應,就好像它已經被點擊過一樣。
注意,如果將按鈕的快捷鍵設置為Return,該按鈕將成為默認按鈕。
通常在Interface Builder中設置一個按鈕的快捷鍵。為此,選擇按鈕并打開檢查器的attributes窗格。顯示按鈕的屬性,單擊鍵Equiv字段,并鍵入要與按鈕相關聯的鍵或鍵組合。(按“清除”鍵可以刪除等效鍵。)

要在程序中設置快捷鍵,可以使用setKeyEquivalent:并傳入相應的字符即可。例如,設置Return為該按鈕的快捷鍵:

[myButton setKeyEquivalent:@"\r"];

要將按鈕的鍵值設置為非打印字符,可以使用NSResponder定義的鍵常量,如下例所示,它將按鈕的鍵值設置為左箭頭鍵。

unichar arrowKey = NSLeftArrowFunctionKey; [button setKeyEquivalent:[NSString stringWithCharacters:&arrowKey length:1]];

子類化NSButton

如果創建了一個NSButton的子類來執行它自己的初始化,覆蓋指定的初始化器(NSView的initWithFrame:方法)。如果想在NSButton的子類中使用自定義NSButtonCell子類,必須重寫cellClass:方法。

總結

以上是生活随笔為你收集整理的Button简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。