| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /***********************************************************************************
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2013 Matthew Styles
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- ***********************************************************************************/
- #import <UIKit/UIKit.h>
- NS_ASSUME_NONNULL_BEGIN
- /**
- * Constants for identifying link types we can detect
- */
- typedef NS_ENUM(NSUInteger, KILinkType)
- {
- /**
- * Usernames starting with "@" token
- */
- KILinkTypeUserHandle,
-
- /**
- * Hashtags starting with "#" token
- */
- KILinkTypeHashtag,
-
- /**
- * URLs, http etc
- */
- KILinkTypeURL,
- };
- /**
- * Flags for specifying combinations of link types as a bitmask
- */
- typedef NS_OPTIONS(NSUInteger, KILinkTypeOption)
- {
- /**
- * No links
- */
- KILinkTypeOptionNone = 0,
-
- /**
- * Specifies to include KILinkTypeUserHandle links
- */
- KILinkTypeOptionUserHandle = 1 << KILinkTypeUserHandle,
-
- /**
- * Specifies to include KILinkTypeHashtag links
- */
- KILinkTypeOptionHashtag = 1 << KILinkTypeHashtag,
-
- /**
- * Specifies to include KILinkTypeURL links
- */
- KILinkTypeOptionURL = 1 << KILinkTypeURL,
-
- /**
- * Convenience contstant to include all link types
- */
- KILinkTypeOptionAll = NSUIntegerMax,
- };
- @class KILabel;
- /**
- * Type for block that is called when a link is tapped
- *
- * @param label The KILabel in which the tap took place
- * @param string Content of the link that was tapped, includes @ or # tokens
- * @param range The range of the string within the label's text
- */
- typedef void (^KILinkTapHandler)(KILabel *label, NSString *string, NSRange range);
- extern NSString * const KILabelLinkTypeKey;
- extern NSString * const KILabelRangeKey;
- extern NSString * const KILabelLinkKey;
- /**
- * A UILabel subclass that highlights links, hashtags and usernames and enables response to user
- * interactions with those links.
- **/
- IB_DESIGNABLE
- @interface KILabel : UILabel <NSLayoutManagerDelegate>
- /** ****************************************************************************************** **
- * @name Setting the link detector
- ** ****************************************************************************************** **/
- /**
- * Enable/disable automatic detection of links, hashtags and usernames.
- */
- @property (nonatomic, assign, getter = isAutomaticLinkDetectionEnabled) IBInspectable BOOL automaticLinkDetectionEnabled;
- /**
- * Specifies the combination of link types to detect. Default value is KILinkTypeAll.
- */
- @property (nonatomic, assign) IBInspectable KILinkTypeOption linkDetectionTypes;
- /**
- * Set containing words to be ignored as links, hashtags or usernames.
- *
- * @discussion The comparison between the matches and the ignored words is case insensitive.
- */
- @property (nullable, nonatomic, strong) NSSet *ignoredKeywords;
- /** ****************************************************************************************** **
- * @name Format & Appearance
- ** ****************************************************************************************** **/
- /**
- * The color used to highlight selected link background.
- *
- * @discussion The default value is (0.95, 0.95, 0.95, 1.0).
- */
- @property (nullable, nonatomic, copy) IBInspectable UIColor *selectedLinkBackgroundColor;
- /**
- * Flag sets if the sytem appearance for URLs should be used (underlined + blue color). Default value is NO.
- */
- @property (nonatomic, assign) IBInspectable BOOL systemURLStyle;
- /**
- * Get the current attributes for the given link type.
- *
- * @param linkType The link type to get the attributes.
- * @return A dictionary of text attributes.
- * @discussion Default attributes contain colored font using the tintColor color property.
- */
- - (nullable NSDictionary*)attributesForLinkType:(KILinkType)linkType;
- /**
- * Set the text attributes for each link type.
- *
- * @param attributes The text attributes.
- * @param linkType The link type.
- * @discussion Default attributes contain colored font using the tintColor color property.
- */
- - (void)setAttributes:(nullable NSDictionary*)attributes forLinkType:(KILinkType)linkType;
- /** ****************************************************************************************** **
- * @name Callbacks
- ** ****************************************************************************************** **/
- /**
- * Callback block for KILinkTypeUserHandle link tap.
- **/
- @property (nullable, nonatomic, copy) KILinkTapHandler userHandleLinkTapHandler;
- /**
- * Callback block for KILinkTypeHashtag link tap.
- */
- @property (nullable, nonatomic, copy) KILinkTapHandler hashtagLinkTapHandler;
- /**
- * Callback block for KILinkTypeURL link tap.
- */
- @property (nullable, nonatomic, copy) KILinkTapHandler urlLinkTapHandler;
- /** ****************************************************************************************** **
- * @name Geometry
- ** ****************************************************************************************** **/
- /**
- * Returns a dictionary of data about the link that it at the location. Returns nil if there is no link.
- *
- * A link dictionary contains the following keys:
- *
- * - **KILabelLinkTypeKey**, a TDLinkType that identifies the type of link.
- * - **KILabelRangeKey**, the range of the link within the label text.
- * - **KILabelLinkKey**, the link text. This could be an URL, handle or hashtag depending on the linkType value.
- *
- * @param point The point in the coordinates of the label view.
- * @return A dictionary containing the link.
- */
- - (nullable NSDictionary*)linkAtPoint:(CGPoint)point;
- @end
- NS_ASSUME_NONNULL_END
|