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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ios中通过调试来使用私有api

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios中通过调试来使用私有api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.csdn.net/cubepeng/article/details/11284173

OS不允許使用ios私有api,使用私有api可以獲得意想不到的效果 ,同時使用私有api是一個程序員的技術體現之一。至于怎么通過apple的審核,其實是有些辦法的,但是不屬于今天討論的范圍。私有api可以通過 dump頭文件獲得,也可以去github clone一份現成的,但是還是推薦自己去dump。但是我們今天不是討論,如何使用dump到的api,而是通過一個例子來討論如何通過查看頭文件使用 私有api。

? ? ? 我們以UITextfield為例,其實這是個比較簡單的控件,有一個藍色輸入的光標,可以在你輸入的時候隱藏或者顯示,但是并沒有給我們提供改變光標顏 色的接口,這個時候我們如果要改變光標的顏色,必然要使用私有api(或者通過比較啰嗦的辦法來做這這件事情)。
? ? ?我們首先需要dump一包頭文件,如何class-dump,不是我們今天討論的要點,現在我們貼上UITextfield的頭文件。如果你覺得很長,直接拖到最后面。


[html] view plaincopy
  • /*??
  • ?*?????Generated?by?class-dump?3.4?(64?bit).??
  • ?*??
  • ?*?????class-dump?is?Copyright?(C)?1997-1998,?2000-2001,?2004-2012?by?Steve?Nygard.??
  • ?*/??
  • ??
  • #import?<UIKit/UIControl.h>??
  • ??
  • #import?"NSCoding.h"??
  • #import?"UIPopoverControllerDelegate.h"??
  • #import?"UITextInput.h"??
  • ??
  • @class?NSArray,?NSAttributedString,?NSDictionary,?NSString,?UIButton,?UIColor,?UIFont,?UIImage,?UIImageView,?UILabel,?UITextFieldAtomBackgroundView,?UITextFieldBackgroundView,?UITextFieldBorderView,?UITextFieldLabel,?UITextInputTraits,?UITextInteractionAssistant,?UITextPosition,?UITextRange,?UIView,?_UIBaselineLayoutStrut,?_UITextServiceSession;??
  • ??
  • @interface?UITextField?:?UIControl?<UIPopoverControllerDelegate,?UITextInput,?NSCoding>??
  • {??
  • ????NSAttributedString?*_text;??
  • ????UIColor?*_textColor;??
  • ????int?_borderStyle;??
  • ????float?_minimumFontSize;??
  • ????id?_delegate;??
  • ????UIImage?*_background;??
  • ????UIImage?*_disabledBackground;??
  • ????int?_clearButtonMode;??
  • ????UIView?*_leftView;??
  • ????int?_leftViewMode;??
  • ????UIView?*_rightView;??
  • ????int?_rightViewMode;??
  • ????UITextInputTraits?*_traits;??
  • ????UITextInputTraits?*_nonAtomTraits;??
  • ????float?_fullFontSize;??
  • ????float?_paddingLeft;??
  • ????float?_paddingTop;??
  • ????float?_paddingRight;??
  • ????float?_paddingBottom;??
  • ????NSString?*_textFont;??
  • ????struct?_NSRange?_selectionRange;??
  • ????int?_scrollXOffset;??
  • ????int?_scrollYOffset;??
  • ????float?_progress;??
  • ????NSString?*_style;??
  • ????UIButton?*_clearButton;??
  • ????struct?CGSize?_clearButtonOffset;??
  • ????struct?CGSize?_leftViewOffset;??
  • ????struct?CGSize?_rightViewOffset;??
  • ????UITextFieldBorderView?*_backgroundView;??
  • ????UITextFieldBorderView?*_disabledBackgroundView;??
  • ????UITextFieldBackgroundView?*_systemBackgroundView;??
  • ????UITextFieldLabel?*_textLabel;??
  • ????UITextFieldLabel?*_placeholderLabel;??
  • ????UITextFieldLabel?*_suffixLabel;??
  • ????UITextFieldLabel?*_prefixLabel;??
  • ????UIImageView?*_iconView;??
  • ????UILabel?*_label;??
  • ????float?_labelOffset;??
  • ????UITextInteractionAssistant?*_interactionAssistant;??
  • ????UIView?*_inputView;??
  • ????UIView?*_inputAccessoryView;??
  • ????UITextFieldAtomBackgroundView?*_atomBackgroundView;??
  • ????UIColor?*_shadowColor;??
  • ????struct?CGSize?_shadowOffset;??
  • ????float?_shadowBlur;??
  • ????struct?{??
  • ????????unsigned?int?secureTextChanged:1;??
  • ????????unsigned?int?guard:1;??
  • ????????unsigned?int?delegateRespondsToHandleKeyDown:1;??
  • ????????unsigned?int?verticallyCenterText:1;??
  • ????????unsigned?int?isAnimating:4;??
  • ????????unsigned?int?inactiveHasDimAppearance:1;??
  • ????????unsigned?int?becomesFirstResponderOnClearButtonTap:1;??
  • ????????unsigned?int?clearsOnBeginEditing:1;??
  • ????????unsigned?int?clearsPlaceholderOnBeginEditing:1;??
  • ????????unsigned?int?adjustsFontSizeToFitWidth:1;??
  • ????????unsigned?int?fieldEditorAttached:1;??
  • ????????unsigned?int?canBecomeFirstResponder:1;??
  • ????????unsigned?int?shouldSuppressShouldBeginEditing:1;??
  • ????????unsigned?int?inResignFirstResponder:1;??
  • ????????unsigned?int?undoDisabled:1;??
  • ????????unsigned?int?contentsRTL:1;??
  • ????????unsigned?int?explicitAlignment:1;??
  • ????????unsigned?int?implementsCustomDrawing:1;??
  • ????????unsigned?int?needsClearing:1;??
  • ????????unsigned?int?suppressContentChangedNotification:1;??
  • ????????unsigned?int?allowsEditingTextAttributes:1;??
  • ????????unsigned?int?usesAttributedText:1;??
  • ????????unsigned?int?backgroundViewState:2;??
  • ????????unsigned?int?clearsOnInsertion:1;??
  • ????}?_textFieldFlags;??
  • ????_UITextServiceSession?*_definitionSession;??
  • ????_UITextServiceSession?*_learnSession;??
  • ????BOOL?_deferringBecomeFirstResponder;??
  • ????BOOL?_avoidBecomeFirstResponder;??
  • ????BOOL?_setSelectionRangeAfterFieldEditorIsAttached;??
  • ????NSArray?*_baselineLayoutConstraints;??
  • ????_UIBaselineLayoutStrut?*_baselineLayoutLabel;??
  • }??
  • ??
  • @property(retain)?UIView?*inputView;?//?@synthesize?inputView=_inputView;??
  • @property(nonatomic)?int?rightViewMode;?//?@synthesize?rightViewMode=_rightViewMode;??
  • @property(retain,?nonatomic)?UIView?*rightView;?//?@synthesize?rightView=_rightView;??
  • @property(nonatomic)?int?leftViewMode;?//?@synthesize?leftViewMode=_leftViewMode;??
  • @property(retain,?nonatomic)?UIView?*leftView;?//?@synthesize?leftView=_leftView;??
  • @property(nonatomic)?int?clearButtonMode;?//?@synthesize?clearButtonMode=_clearButtonMode;??
  • @property(retain,?nonatomic)?UIImage?*disabledBackground;?//?@synthesize?disabledBackground=_disabledBackground;??
  • @property(retain,?nonatomic)?UIImage?*background;?//?@synthesize?background=_background;??
  • @property(nonatomic)?id?<UITextFieldDelegate>?delegate;?//?@synthesize?delegate=_delegate;??
  • @property(nonatomic)?float?minimumFontSize;?//?@synthesize?minimumFontSize=_minimumFontSize;??
  • @property(nonatomic)?int?borderStyle;?//?@synthesize?borderStyle=_borderStyle;??
  • @property(retain,?nonatomic,?setter=_setBaselineLayoutLabel:)?_UIBaselineLayoutStrut?*_baselineLayoutLabel;?//?@synthesize?_baselineLayoutLabel;??
  • @property(copy,?nonatomic,?setter=_setBaselineLayoutConstraints:)?NSArray?*_baselineLayoutConstraints;?//?@synthesize?_baselineLayoutConstraints;??
  • -?(void)setSelectionGranularity:(int)arg1;??
  • -?(int)selectionGranularity;??
  • -?(id)_findWebViewWordBoundaryFromPosition:(id)arg1;??
  • @property(nonatomic)?int?selectionAffinity;??
  • -?(id)characterRangeAtPoint:(struct?CGPoint)arg1;??
  • -?(id)closestPositionToPoint:(struct?CGPoint)arg1?withinRange:(id)arg2;??
  • -?(id)closestPositionToPoint:(struct?CGPoint)arg1;??
  • -?(struct?CGRect)caretRectForPosition:(id)arg1;??
  • -?(struct?CGRect)firstRectForRange:(id)arg1;??
  • -?(void)setBaseWritingDirection:(int)arg1?forRange:(id)arg2;??
  • -?(int)baseWritingDirectionForPosition:(id)arg1?inDirection:(int)arg2;??
  • -?(id)characterRangeByExtendingPosition:(id)arg1?inDirection:(int)arg2;??
  • -?(id)positionWithinRange:(id)arg1?farthestInDirection:(int)arg2;??
  • @property(readonly,?nonatomic)?id?<UITextInputTokenizer>?tokenizer;??
  • @property(nonatomic)?id?<UITextInputDelegate>?inputDelegate;??
  • -?(int)offsetFromPosition:(id)arg1?toPosition:(id)arg2;??
  • -?(int)comparePosition:(id)arg1?toPosition:(id)arg2;??
  • -?(id)positionFromPosition:(id)arg1?inDirection:(int)arg2?offset:(int)arg3;??
  • -?(id)positionFromPosition:(id)arg1?offset:(int)arg2;??
  • -?(id)textRangeFromPosition:(id)arg1?toPosition:(id)arg2;??
  • @property(readonly,?nonatomic)?UITextPosition?*endOfDocument;??
  • @property(readonly,?nonatomic)?UITextPosition?*beginningOfDocument;??
  • -?(void)unmarkText;??
  • -?(void)setMarkedText:(id)arg1?selectedRange:(struct?_NSRange)arg2;??
  • @property(copy,?nonatomic)?NSDictionary?*markedTextStyle;??
  • @property(readonly,?nonatomic)?UITextRange?*markedTextRange;??
  • @property(copy)?UITextRange?*selectedTextRange;??
  • -?(void)replaceRange:(id)arg1?withText:(id)arg2;??
  • -?(id)textInRange:(id)arg1;??
  • -?(BOOL)hasText;??
  • -?(id)metadataDictionariesForDictationResults;??
  • -?(struct?CGRect)frameForDictationResultPlaceholder:(id)arg1;??
  • -?(void)removeDictationResultPlaceholder:(id)arg1?willInsertResult:(BOOL)arg2;??
  • -?(id)insertDictationResultPlaceholder;??
  • -?(void)insertDictationResult:(id)arg1?withCorrectionIdentifier:(id)arg2;??
  • -?(void)insertText:(id)arg1;??
  • -?(void)deleteBackward;??
  • -?(id)_proxyTextInput;??
  • -?(BOOL)canPerformAction:(SEL)arg1?withSender:(id)arg2;??
  • -?(BOOL)inPopover;??
  • -?(void)_promptForReplace:(id)arg1;??
  • -?(void)replace:(id)arg1;??
  • -?(void)_showTextStyleOptions:(id)arg1;??
  • -?(void)toggleUnderline:(id)arg1;??
  • -?(void)toggleItalics:(id)arg1;??
  • -?(void)toggleBoldface:(id)arg1;??
  • -?(void)makeTextWritingDirectionLeftToRight:(id)arg1;??
  • -?(void)makeTextWritingDirectionRightToLeft:(id)arg1;??
  • -?(void)selectAll:(id)arg1;??
  • -?(void)select:(id)arg1;??
  • -?(void)paste:(id)arg1;??
  • -?(void)_addShortcut:(id)arg1;??
  • -?(void)_selectionMayChange:(id)arg1;??
  • -?(BOOL)_isDisplayingReferenceLibraryViewController;??
  • -?(void)_define:(id)arg1;??
  • -?(void)copy:(id)arg1;??
  • -?(void)cut:(id)arg1;??
  • -?(id)webView;??
  • -?(struct?CGPoint)constrainedPoint:(struct?CGPoint)arg1;??
  • -?(unsigned?int)offsetInMarkedTextForSelection:(id)arg1;??
  • -?(struct?CGRect)closestCaretRectInMarkedTextRangeForPoint:(struct?CGPoint)arg1;??
  • -?(id)selectedAttributedText;??
  • -?(id)selectedText;??
  • -?(id)selectionRectsForRange:(id)arg1;??
  • -?(struct?CGRect)_selectionClipRect;??
  • -?(id)interactionAssistant;??
  • -?(id)selectionView;??
  • -?(void)cancelAutoscroll;??
  • -?(void)startAutoscroll:(struct?CGPoint)arg1;??
  • -?(BOOL)hasSelection;??
  • -?(id)_fieldEditor;??
  • -?(void)endSelectionChange;??
  • -?(void)beginSelectionChange;??
  • -?(BOOL)isEditable;??
  • -?(id)undoManager;??
  • -?(int)atomStyle;??
  • -?(void)setAtomStyle:(int)arg1;??
  • -?(BOOL)drawsAsAtom;??
  • -?(void)setDrawsAsAtom:(BOOL)arg1;??
  • -?(void)setClearButtonOffset:(struct?CGSize)arg1;??
  • -?(void)_clearButtonClicked:(id)arg1;??
  • -?(BOOL)isUndoEnabled;??
  • -?(void)setUndoEnabled:(BOOL)arg1;??
  • -?(void)setTextCentersVertically:(BOOL)arg1;??
  • -?(void)setTextCentersHorizontally:(BOOL)arg1;??
  • -?(void)setLabel:(id)arg1;??
  • -?(id)textLabel;??
  • -?(void)setLabelOffset:(float)arg1;??
  • -?(BOOL)hasMarkedText;??
  • -?(void)setProgress:(float)arg1;??
  • -?(struct?CGRect)iconRect;??
  • -?(void)setBecomesFirstResponderOnClearButtonTap:(BOOL)arg1;??
  • -?(struct?CGSize)clearButtonOffset;??
  • -?(void)setIcon:(id)arg1;??
  • -?(unsigned?int)characterOffsetAtPoint:(struct?CGPoint)arg1;??
  • -?(void)setSelectionRange:(struct?_NSRange)arg1;??
  • -?(struct?_NSRange)selectionRange;??
  • -?(void)clearText;??
  • -?(void)layoutTilesNow;??
  • -?(void)_resetSelectionUI;??
  • -?(void)_clearSelectionUI;??
  • -?(void)selectAll;??
  • -?(void)setEnabled:(BOOL)arg1;??
  • -?(void)_setEnabled:(BOOL)arg1?animated:(BOOL)arg2;??
  • -?(void)setInactiveHasDimAppearance:(BOOL)arg1;??
  • -?(void)setTextFont:(id)arg1;??
  • -?(float)paddingRight;??
  • -?(void)setPaddingRight:(float)arg1;??
  • -?(float)paddingBottom;??
  • -?(void)setPaddingBottom:(float)arg1;??
  • -?(float)paddingTop;??
  • -?(void)setPaddingTop:(float)arg1;??
  • -?(float)paddingLeft;??
  • -?(void)setPaddingLeft:(float)arg1;??
  • -?(void)setPaddingTop:(float)arg1?paddingLeft:(float)arg2;??
  • -?(void)drawBorder:(struct?CGRect)arg1;??
  • -?(void)drawRect:(struct?CGRect)arg1;??
  • -?(BOOL)_canDrawContent;??
  • -?(BOOL)_implementsCustomDrawing;??
  • -?(struct?CGRect)editRect;??
  • -?(struct?CGRect)textRect;??
  • -?(struct?CGRect)clearButtonRect;??
  • -?(void)setClearButtonStyle:(int)arg1;??
  • -?(void)setTextAutorresizesToFit:(BOOL)arg1;??
  • -?(void)setAutoresizesTextToFit:(BOOL)arg1;??
  • -?(id)documentFragmentForPasteboardItemAtIndex:(int)arg1;??
  • -?(id)_dictationInterpretations;??
  • -?(id)supportedPasteboardTypesForCurrentSelection;??
  • -?(BOOL)fieldEditor:(id)arg1?shouldReplaceWithText:(id)arg2;??
  • -?(BOOL)fieldEditor:(id)arg1?shouldInsertText:(id)arg2?replacingRange:(struct?_NSRange)arg3;??
  • -?(void)fieldEditorDidChangeSelection:(id)arg1;??
  • -?(struct?_NSRange)fieldEditor:(id)arg1?willChangeSelectionFromCharacterRange:(struct?_NSRange)arg2?toCharacterRange:(struct?_NSRange)arg3;??
  • -?(void)selectAllFromFieldEditor:(id)arg1;??
  • -?(void)fieldEditorDidChange:(id)arg1;??
  • -?(id)customOverlayContainer;??
  • -?(void)keyboardInputChangedSelection:(id)arg1;??
  • -?(BOOL)keyboardInputChanged:(id)arg1;??
  • -?(BOOL)keyboardInputShouldDelete:(id)arg1;??
  • -?(BOOL)keyboardInput:(id)arg1?shouldReplaceTextInRange:(struct?_NSRange)arg2?replacementText:(id)arg3;??
  • -?(BOOL)keyboardInput:(id)arg1?shouldInsertText:(id)arg2?isMarkedText:(BOOL)arg3;??
  • -?(void)_applicationResuming:(id)arg1;??
  • -?(void)willDetachFieldEditor:(id)arg1;??
  • -?(void)attachFieldEditor:(id)arg1;??
  • -?(void)willAttachFieldEditor:(id)arg1;??
  • -?(void)_drawTextInRect:(struct?CGRect)arg1?forLabel:(id)arg2;??
  • -?(void)drawPrefixInRect:(struct?CGRect)arg1;??
  • -?(void)drawSuffixInRect:(struct?CGRect)arg1;??
  • -?(void)drawPlaceholderInRect:(struct?CGRect)arg1;??
  • -?(void)drawTextInRect:(struct?CGRect)arg1;??
  • -?(struct?CGRect)rightViewRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)leftViewRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)_baselineLeftViewRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)clearButtonRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)editingRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)placeholderRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)textRectForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)borderRectForBounds:(struct?CGRect)arg1;??
  • @property(retain)?UIView?*inputAccessoryView;??
  • @property(readonly,?nonatomic,?getter=isEditing)?BOOL?editing;??
  • -?(id)backgroundColor;??
  • -?(void)setBackgroundColor:(id)arg1;??
  • @property(copy,?nonatomic)?NSDictionary?*typingAttributes;??
  • @property(nonatomic)?BOOL?allowsEditingTextAttributes;??
  • @property(nonatomic)?BOOL?adjustsFontSizeToFitWidth;??
  • -?(void)setClearsPlaceholderOnBeginEditing:(BOOL)arg1;??
  • -?(BOOL)clearsPlaceholderOnBeginEditing;??
  • @property(nonatomic)?BOOL?clearsOnBeginEditing;??
  • -?(void)_setPrefix:(id)arg1;??
  • -?(void)_setSuffix:(id)arg1?withColor:(id)arg2;??
  • @property(copy,?nonatomic)?NSAttributedString?*attributedPlaceholder;??
  • @property(copy,?nonatomic)?NSString?*placeholder;??
  • -?(void)createPlaceholderIfNecessary;??
  • -?(void)finishedSettingPlaceholder;??
  • -?(id)createTextLabelWithTextColor:(id)arg1;??
  • -?(void)_createBaselineLayoutLabelIfNecessary;??
  • -?(id)createPlaceholderLabelWithFont:(id)arg1?andTextAlignment:(int)arg2;??
  • -?(void)setContentVerticalAlignment:(int)arg1;??
  • @property(nonatomic)?int?textAlignment;??
  • @property(retain,?nonatomic)?UIFont?*font;??
  • -?(void)disableClearsOnInsertion;??
  • @property(nonatomic)?BOOL?clearsOnInsertion;??
  • -?(float)shadowBlur;??
  • -?(void)setShadowBlur:(float)arg1;??
  • -?(struct?CGSize)shadowOffset;??
  • -?(void)setShadowOffset:(struct?CGSize)arg1;??
  • -?(id)shadowColor;??
  • -?(void)setShadowColor:(id)arg1;??
  • @property(retain,?nonatomic)?UIColor?*textColor;??
  • -?(void)_updateTextColor;??
  • @property(copy,?nonatomic)?NSAttributedString?*attributedText;??
  • -?(void)_setAttributedText:(id)arg1?onFieldEditorAndSetCaretSelectionAfterText:(BOOL)arg2;??
  • -?(void)_transferTextFieldPropertiesFromText:(id)arg1;??
  • -?(void)_transferAttribute:(id)arg1?fromString:(id)arg2?andSetPropertyWith:(SEL)arg3?usingValueClass:(Class)arg4;??
  • @property(copy,?nonatomic)?NSString?*text;??
  • -?(void)finishedSettingTextOrAttributedText;??
  • -?(id)searchText;??
  • -?(BOOL)_hasContent;??
  • -?(id)_attributedText;??
  • -?(id)_text;??
  • @property(nonatomic,?getter=isSecureTextEntry)?BOOL?secureTextEntry;?//?@dynamic?secureTextEntry;??
  • -?(void)_updateTextLabel;??
  • -?(BOOL)respondsToSelector:(SEL)arg1;??
  • -?(id)methodSignatureForSelector:(SEL)arg1;??
  • -?(void)forwardInvocation:(id)arg1;??
  • -?(id)textInputTraits;??
  • -?(BOOL)_shouldSendContentChangedNotificationsIfOnlyMarkedTextChanged;??
  • -?(id)_textLabelView;??
  • -?(id)_placeholderLabel;??
  • -?(id)_placeholderView;??
  • -?(id)_placeholderColor;??
  • -?(void)_setSystemBackgroundViewActive:(BOOL)arg1;??
  • -?(BOOL)_fieldEditorAttached;??
  • -?(Class)_systemBackgroundViewClass;??
  • -?(void)_setRightViewOffset:(struct?CGSize)arg1;??
  • -?(struct?CGSize)_rightViewOffset;??
  • -?(void)_setLeftViewOffset:(struct?CGSize)arg1;??
  • -?(struct?CGSize)_leftViewOffset;??
  • -?(struct?CGPoint)_scrollOffset;??
  • -?(id)actualFont;??
  • -?(float)actualMinimumFontSize;??
  • -?(struct?CGRect)adjustedCaretRectForCaretRect:(struct?CGRect)arg1;??
  • -?(void)_updateRTLStateForText:(id)arg1?updateAlignment:(BOOL)arg2;??
  • -?(void)_setImplicitAlignment;??
  • -?(void)_clearBackgroundViews;??
  • -?(void)_updateBackgroundViewsAnimated:(BOOL)arg1;??
  • -?(BOOL)_shouldEndEditing;??
  • -?(void)layoutSubviews;??
  • -?(struct?CGRect)_prefixFrame;??
  • -?(struct?CGRect)_suffixFrame;??
  • -?(void)updateConstraints;??
  • -?(void)_setUpBaselineLayoutConstraints;??
  • -?(struct?CGRect)_frameForLabel:(id)arg1?inTextRect:(struct?CGRect)arg2;??
  • -?(void)_updateLabel;??
  • -?(struct?CGRect)_textRectExcludingButtonsForBounds:(struct?CGRect)arg1;??
  • -?(struct?CGRect)_textRectForBounds:(struct?CGRect)arg1?forEditing:(BOOL)arg2;??
  • -?(BOOL)_isShowingPrefix;??
  • -?(BOOL)_isShowingPlaceholder;??
  • -?(BOOL)_showsRightView;??
  • -?(BOOL)_showsLeftView;??
  • -?(BOOL)_showsClearButtonWhenEmpty;??
  • -?(BOOL)_showsClearButton:(BOOL)arg1;??
  • -?(BOOL)_showsClearButtonWhenNonEmpty:(BOOL)arg1;??
  • -?(void)_updateAtomBackground;??
  • -?(BOOL)_showsAtomBackground;??
  • -?(BOOL)_partsShouldBeMini;??
  • -?(BOOL)_heightShouldBeMini;??
  • -?(struct?CGRect)_atomBackgroundViewFrame;??
  • -?(void)_updateAutosizeStyleIfNeeded;??
  • -?(void)_updateButtons;??
  • -?(id)_clearButton;??
  • -?(id)clearButton;??
  • -?(id)_clearButtonImageForState:(unsigned?int)arg1;??
  • -?(void)_endedEditing;??
  • -?(id)_style;??
  • -?(id)_createCSSStyleDeclarationForWebView:(id)arg1;??
  • -?(float)_marginTop;??
  • -?(id)_copyFont:(id)arg1?newSize:(float)arg2?maxSize:(float)arg3;??
  • -?(void)setFont:(id)arg1?fullFontSize:(float)arg2;??
  • -?(id)hitTest:(struct?CGPoint)arg1?withEvent:(id)arg2;??
  • -?(void)touchesEnded:(id)arg1?withEvent:(id)arg2;??
  • -?(void)touchesCancelled:(id)arg1?withEvent:(id)arg2;??
  • -?(void)_resignFirstResponder;??
  • -?(void)_windowBecameKey;??
  • -?(BOOL)resignFirstResponder;??
  • -?(void)_removeShortcutController;??
  • -?(void)_removeDefinitionController;??
  • -?(void)_becomeFirstResponder;??
  • -?(void)_updatePlaceholderPosition;??
  • -?(int)_currentTextAlignment;??
  • -?(void)__resumeBecomeFirstResponder;??
  • -?(void)_becomeFirstResponderAndMakeVisible;??
  • -?(BOOL)_requiresKeyboardResetOnReload;??
  • -?(id)_keyboardResponder;??
  • -?(BOOL)canResignFirstResponder;??
  • -?(BOOL)canBecomeFirstResponder;??
  • -?(struct?CGSize)sizeThatFits:(struct?CGSize)arg1;??
  • -?(struct?CGSize)_intrinsicSizeWithinSize:(struct?CGSize)arg1;??
  • -?(id)viewForBaselineLayout;??
  • -?(struct?CGSize)_textSize;??
  • -?(struct?CGSize)_textSizeUsingFullFontSize:(BOOL)arg1;??
  • -?(void)setAnimating:(BOOL)arg1;??
  • -?(void)setBounds:(struct?CGRect)arg1;??
  • -?(void)setFrame:(struct?CGRect)arg1;??
  • -?(void)_sizeChanged:(BOOL)arg1;??
  • -?(void)_setNeedsStyleRecalc;??
  • -?(void)_clearStyle;??
  • -?(void)dealloc;??
  • -?(void)_encodeBackgroundColorWithCoder:(id)arg1;??
  • -?(void)encodeWithCoder:(id)arg1;??
  • -?(void)_populateArchivedSubviews:(id)arg1;??
  • -?(id)initWithCoder:(id)arg1;??
  • -?(id)initWithFrame:(struct?CGRect)arg1;??
  • -?(void)_invalidateBaselineLayoutConstraints;??
  • -?(id)_scriptingInfo;??
  • -?(void)decodeRestorableStateWithCoder:(id)arg1;??
  • -?(void)encodeRestorableStateWithCoder:(id)arg1;??
  • -?(BOOL)isElementAccessibilityExposedToInterfaceBuilder;??
  • -?(BOOL)isAccessibilityElementByDefault;??
  • ??
  • //?Remaining?properties??
  • @property(nonatomic)?int?autocapitalizationType;?//?@dynamic?autocapitalizationType;??
  • @property(nonatomic)?int?autocorrectionType;?//?@dynamic?autocorrectionType;??
  • @property(nonatomic)?BOOL?enablesReturnKeyAutomatically;?//?@dynamic?enablesReturnKeyAutomatically;??
  • @property(nonatomic)?int?keyboardAppearance;?//?@dynamic?keyboardAppearance;??
  • @property(nonatomic)?int?keyboardType;?//?@dynamic?keyboardType;??
  • @property(nonatomic)?int?returnKeyType;?//?@dynamic?returnKeyType;??
  • @property(nonatomic)?int?spellCheckingType;?//?@dynamic?spellCheckingType;??
  • @property(readonly,?nonatomic)?UIView?*textInputView;??
  • ??
  • @end??

  • 首先我們看它聲明的方法,關于cursor 的函數,或者表示類似顏色設置的函數,一看之下,沒有。這個時候我們注意到有一個函數是?- (id)textInputTraits;

    字面意思上是文本輸入特征的意思,這個很有可能是我們需要的設置光標的顏色,ok,現在我們開始寫代碼。

    省略創建project的步驟,直接上代碼




    我們看到private 下面,有一行是標識color的,很可能這個就是我們找的光標樣色的屬性。同樣我們看一下 UITextfieldTraits的頭文件,找到我們需要調用的函數。

    [html] view plaincopy
  • /*??
  • ?*?????Generated?by?class-dump?3.4?(64?bit).??
  • ?*??
  • ?*?????class-dump?is?Copyright?(C)?1997-1998,?2000-2001,?2004-2012?by?Steve?Nygard.??
  • ?*/??
  • ??
  • #import?"NSObject.h"??
  • ??
  • #import?"NSCopying.h"??
  • #import?"UITextInputTraits.h"??
  • #import?"UITextInputTraits_Private.h"??
  • ??
  • @class?UIColor,?UIImage;??
  • ??
  • @interface?UITextInputTraits?:?NSObject?<UITextInputTraits,?UITextInputTraits_Private,?NSCopying>??
  • {??
  • ????int?autocapitalizationType;??
  • ????int?autocorrectionType;??
  • ????int?spellCheckingType;??
  • ????unsigned?int?keyboardType:8;??
  • ????unsigned?int?keyboardAppearance:8;??
  • ????int?returnKeyType;??
  • ????BOOL?enablesReturnKeyAutomatically;??
  • ????BOOL?secureTextEntry;??
  • ????struct?__CFCharacterSet?*textTrimmingSet;??
  • ????UIColor?*insertionPointColor;??
  • ????UIColor?*selectionBarColor;??
  • ????UIColor?*selectionHighlightColor;??
  • ????UIImage?*selectionDragDotImage;??
  • ????unsigned?int?insertionPointWidth;??
  • ????int?textLoupeVisibility;??
  • ????int?textSelectionBehavior;??
  • ????id?textSuggestionDelegate;??
  • ????BOOL?contentsIsSingleValue;??
  • ????BOOL?acceptsEmoji;??
  • ????BOOL?returnKeyGoesToNextResponder;??
  • ????BOOL?acceptsFloatingKeyboard;??
  • ????BOOL?acceptsSplitKeyboard;??
  • ????BOOL?displaySecureTextUsingPlainText;??
  • ????BOOL?learnsCorrections;??
  • ????int?emptyContentReturnKeyType;??
  • ????int?shortcutConversionType;??
  • ????BOOL?suppressReturnKeyStyling;??
  • ????BOOL?forceEnableDictation;??
  • ????BOOL?useInterfaceLanguageForLocalization;??
  • ????BOOL?deferBecomingResponder;??
  • }??
  • ??
  • +?(BOOL)keyboardTypeRequiresASCIICapable:(int)arg1;??
  • +?(id)traitsByAdoptingTraits:(id)arg1;??
  • +?(id)defaultTextInputTraits;??
  • @property(nonatomic)?BOOL?deferBecomingResponder;?//?@synthesize?deferBecomingResponder;??
  • @property(nonatomic)?BOOL?useInterfaceLanguageForLocalization;?//?@synthesize?useInterfaceLanguageForLocalization;??
  • @property(nonatomic)?BOOL?forceEnableDictation;?//?@synthesize?forceEnableDictation;??
  • @property(nonatomic)?BOOL?suppressReturnKeyStyling;?//?@synthesize?suppressReturnKeyStyling;??
  • @property(nonatomic)?int?shortcutConversionType;?//?@synthesize?shortcutConversionType;??
  • @property(nonatomic)?BOOL?learnsCorrections;?//?@synthesize?learnsCorrections;??
  • @property(nonatomic)?BOOL?displaySecureTextUsingPlainText;?//?@synthesize?displaySecureTextUsingPlainText;??
  • @property(nonatomic)?BOOL?acceptsSplitKeyboard;?//?@synthesize?acceptsSplitKeyboard;??
  • @property(nonatomic)?BOOL?acceptsFloatingKeyboard;?//?@synthesize?acceptsFloatingKeyboard;??
  • @property(nonatomic)?BOOL?returnKeyGoesToNextResponder;?//?@synthesize?returnKeyGoesToNextResponder;??
  • @property(nonatomic)?int?emptyContentReturnKeyType;?//?@synthesize?emptyContentReturnKeyType;??
  • @property(nonatomic)?BOOL?acceptsEmoji;?//?@synthesize?acceptsEmoji;??
  • @property(nonatomic)?BOOL?contentsIsSingleValue;?//?@synthesize?contentsIsSingleValue;??
  • @property(nonatomic)?int?textSelectionBehavior;?//?@synthesize?textSelectionBehavior;??
  • @property(nonatomic)?int?textLoupeVisibility;?//?@synthesize?textLoupeVisibility;??
  • @property(nonatomic)?unsigned?int?insertionPointWidth;?//?@synthesize?insertionPointWidth;??
  • @property(retain,?nonatomic)?UIImage?*selectionDragDotImage;?//?@synthesize?selectionDragDotImage;??
  • @property(retain,?nonatomic)?UIColor?*selectionHighlightColor;?//?@synthesize?selectionHighlightColor;??
  • @property(retain,?nonatomic)?UIColor?*selectionBarColor;?//?@synthesize?selectionBarColor;??
  • @property(retain,?nonatomic)?UIColor?*insertionPointColor;?//?@synthesize?insertionPointColor;??
  • @property(nonatomic,?getter=isSecureTextEntry)?BOOL?secureTextEntry;?//?@synthesize?secureTextEntry;??
  • @property(nonatomic)?BOOL?enablesReturnKeyAutomatically;?//?@synthesize?enablesReturnKeyAutomatically;??
  • @property(nonatomic)?int?returnKeyType;?//?@synthesize?returnKeyType;??
  • @property(nonatomic)?int?keyboardAppearance;?//?@synthesize?keyboardAppearance;??
  • @property(nonatomic)?int?keyboardType;?//?@synthesize?keyboardType;??
  • @property(nonatomic)?int?spellCheckingType;?//?@synthesize?spellCheckingType;??
  • @property(nonatomic)?int?autocorrectionType;?//?@synthesize?autocorrectionType;??
  • @property(nonatomic)?int?autocapitalizationType;?//?@synthesize?autocapitalizationType;??
  • -?(BOOL)isEqual:(id)arg1;??
  • -?(id)description;??
  • -?(id)copyWithZone:(struct?_NSZone?*)arg1;??
  • -?(void)takeTraitsFrom:(id)arg1;??
  • -?(void)setToDefaultValues;??
  • -?(void)dealloc;??
  • -?(id)init;??
  • @property(nonatomic)?id?textSuggestionDelegate;?//?@dynamic?textSuggestionDelegate;??
  • @property(nonatomic)?struct?__CFCharacterSet?*textTrimmingSet;?//?@dynamic?textTrimmingSet;??
  • -?(id)dictionaryRepresentation;??
  • -?(void)setToSecureValues;??
  • ??
  • @end??

  • 我們找到一個property :?insertionPointColor,字面意思上基本上確定這個就是我們要找的設置光標的函數。

    經過嘗試果然如此,現在貼上結果



    各位看官,這次的關于私有api的分析就結束了,其實整個過程沒這么順利,只是我省掉了一些,本身這個做法我也沒有用到項目中,而是選擇一個開源的 項目,但是對于私有api的熟悉也體現一個程序員對于apple這套東西的熟悉,同時我們可以模仿私有的實現,做一些事情,但是不推薦大家直接使用私有 api。


    轉載于:https://www.cnblogs.com/frounk/p/4708815.html

    總結

    以上是生活随笔為你收集整理的ios中通过调试来使用私有api的全部內容,希望文章能夠幫你解決所遇到的問題。

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