iOS 에서 클립보드 관리 하 는 UIPasteboard 붙 여 넣 기
8455 단어 iOSUIPasteboard
iOS 의 UI 시스템 에 서 는 UITextField,UITextView,UIWebView 등 3 개의 컨트롤 이 자체 클립보드 로 작 동 합 니 다.이 컨트롤 들 의 문자 상호작용 에서 제스처 를 길 게 누 르 면 화면 보기에 서 시스템 의 클립보드 컨트롤 을 불 러 올 수 있 고 사용 자 는 복사,붙 여 넣 기,잘라 내기 등 을 할 수 있 으 며 그 효 과 는 다음 그림 과 같다.
UITextField 의 텍스트 동작
UITextView 의 텍스트 동작
2.시스템 클립보드 관리 류 UIPasteboard
실제로 사용자 가 위의 공간 을 통 해 복사,편집 등 작업 을 할 때 선택 한 내용 은 시스템 의 클립보드 에 저 장 됩 니 다.또한 이 클립보드 에는 문자열 데이터 만 저장 할 수 있 는 것 이 아니 라 이미지 데이터 와 URL 데 이 터 를 저장 할 수 있 습 니 다.이 클립보드 가 UIPasteboard 클래스 로 개발 자가 직접 데 이 터 를 조작 하여 응용 프로그램 이나 응용 프로그램 간 의 값 을 전달 할 수 있 습 니 다.
UIPasteboard 클래스 는 다음 과 같은 3 가지 초기 화 방법 이 있 습 니 다.
//
+ (UIPasteboard *)generalPasteboard;
// name create
+ (nullable UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;
//
+ (UIPasteboard *)pasteboardWithUniqueName;
위의 세 가지 초기 화 방법 은 각각 3 개의 등급 이 다른 클립보드 를 가 져 오 거나 만 듭 니 다.시스템 등급 의 클립보드 가 전체 장치 에서 공유 되 고 있 습 니 다.즉,응용 프로그램 이 삭제 되 었 고 시스템 급 클립보드 에 기 록 된 데 이 터 는 여전히 있 습 니 다.사용자 정의 클립보드 는 특정한 이름 문자열 을 통 해 만 듭 니 다.프로그램 이나 같은 개발 자가 개발 한 다른 프로그램 에서 데이터 공 유 를 할 수 있 습 니 다.세 번 째 방법 으로 만 든 클립보드 등 가 는 두 번 째 방법 으로 만 든 클립보드 입 니 다.이름 문자열 만 nil 이 고 현재 응용 내부 에 사 용 됩 니 다.메모:세 번 째 방법 으로 만 든 클립보드 의 기본 값 은 데이터 가 오래 지속 되 지 않 으 며,프로그램 이 종료 되면 클립보드 의 내용 은 지 워 지지 않 습 니 다.지구 화 를 실현 하려 면 persistent 속성 을 YES 로 설정 해 야 합 니 다.
UIPasteboard 에서 자주 사용 하 는 방법 및 속성 은 다음 과 같 습 니 다.
//
@property(readonly,nonatomic) NSString *name;
//
+ (void)removePasteboardWithName:(NSString *)pasteboardName;
//
@property(getter=isPersistent,nonatomic) BOOL persistent;
//
@property(readonly,nonatomic) NSInteger changeCount;
다음 방법 들 은 클립보드 의 데 이 터 를 설정 하고 가 져 오 는 데 사 용 됩 니 다.최신 데이터 대상 의 액세스:
//
- (NSArray<NSString *> *)pasteboardTypes;
//
- (BOOL)containsPasteboardTypes:(NSArray<NSString *> *)pasteboardTypes;
//
- (nullable NSData *)dataForPasteboardType:(NSString *)pasteboardType;
//
- (nullable id)valueForPasteboardType:(NSString *)pasteboardType;
//
- (void)setValue:(id)value forPasteboardType:(NSString *)pasteboardType;
//
- (void)setData:(NSData *)data forPasteboardType:(NSString *)pasteboardType;
:
//
@property(readonly,nonatomic) NSInteger numberOfItems;
//
- (nullable NSArray *)pasteboardTypesForItemSet:(nullable NSIndexSet*)itemSet;
//
- (BOOL)containsPasteboardTypes:(NSArray<NSString *> *)pasteboardTypes inItemSet:(nullable NSIndexSet *)itemSet;
//
- (nullable NSIndexSet *)itemSetWithPasteboardTypes:(NSArray *)pasteboardTypes;
//
- (nullable NSArray *)valuesForPasteboardType:(NSString *)pasteboardType inItemSet:(nullable NSIndexSet *)itemSet;
// NSData
- (nullable NSArray *)dataForPasteboardType:(NSString *)pasteboardType inItemSet:(nullable NSIndexSet *)itemSet;
//
@property(nonatomic,copy) NSArray *items;
//
- (void)addItems:(NSArray<NSDictionary<NSString *, id> *> *)items;
상기 방법 에서 데이터 형식 파 라 메 터 를 전송 해 야 하 는 경우 가 많 습 니 다.이런 파 라 메 터 는 시스템 이 정의 한 일부 문자 입 니 다.다음 과 같 습 니 다.
//
UIKIT_EXTERN NSArray<NSString *> *UIPasteboardTypeListString;
// URL
UIKIT_EXTERN NSArray<NSString *> *UIPasteboardTypeListURL;
//
UIKIT_EXTERN NSArray<NSString *> *UIPasteboardTypeListImage;
//
UIKIT_EXTERN NSArray<NSString *> *UIPasteboardTypeListColor;
위의 두 가지 방법 에 비해 아래 의 이런 방법 들 은 대상 을 대상 으로 하고 개발 에서 사용 하 는 것 이 더욱 편리 하고 빠르다.
//
@property(nullable,nonatomic,copy) NSString *string;
//
@property(nullable,nonatomic,copy) NSArray<NSString *> *strings;
// URL
@property(nullable,nonatomic,copy) NSURL *URL;
// URL
@property(nullable,nonatomic,copy) NSArray<NSURL *> *URLs;
// s
@property(nullable,nonatomic,copy) UIImage *image;
//
@property(nullable,nonatomic,copy) NSArray<UIImage *> *images;
//
@property(nullable,nonatomic,copy) UIColor *color;
//
@property(nullable,nonatomic,copy) NSArray<UIColor *> *colors;
:
//
UIKIT_EXTERN NSString *const UIPasteboardChangedNotification;
//
UIKIT_EXTERN NSString *const UIPasteboardChangedTypesAddedKey;
//
UIKIT_EXTERN NSString *const UIPasteboardChangedTypesRemovedKey;
//
UIKIT_EXTERN NSString *const UIPasteboardRemovedNotification;
3.사진 을 복사 하 는 간단 한 예CopyView 만 들 기
#import "CopyView.h"
@interface CopyView ()
@property (strong, nonatomic) UIImageView* img1;
@property (strong, nonatomic) UIImageView* img2;
@end
@implementation CopyView
-(UIImageView *)img1{
if (_img1 == nil) {
_img1 = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, 20.0f, 100.0f, 100.0f)];
NSString* path = [[NSBundle mainBundle] pathForResource:@"NetworldImage" ofType:@"jpg"];
_img1.image = [UIImage imageWithContentsOfFile:path];
}
return _img1;
}
-(UIImageView *)img2{
if (_img2 == nil) {
_img2 = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.img1.frame)+50.0f, 20.0f, 100.0f, 100.0f)];
_img2.backgroundColor = [UIColor lightGrayColor];
}
return _img2;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
[self addSubview:self.img1];
[self addSubview:self.img2];
}
return self;
}
-(BOOL)canBecomeFirstResponder{
return YES;
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
NSArray* methodNameArr = @[@"copy:",@"cut:",@"select:",@"selectAll:",@"paste:"];
if ([methodNameArr containsObject:NSStringFromSelector(action)]) {
return YES;
}
return [super canPerformAction:action withSender:sender];
}
-(void)copy:(id)sender{
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setImage:self.img1.image];
}
-(void)paste:(id)sender{
UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
self.img2.image = [pasteboard image];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self becomeFirstResponder];
UIMenuController* menuController = [UIMenuController sharedMenuController];
[menuController setTargetRect:self.img1.frame inView:self];
[menuController setMenuVisible:YES animated:YES];
}
@end
controller
#import "ViewController.h"
#import "CopyView.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CopyView* cv = [[CopyView alloc] initWithFrame:self.view.bounds];
self.view = cv;
}
@end
효과 전시이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.