Chúng tôi có thể bật menu dán bản sao cắt cho
UILabel
vì nó dành choUITextField
không?Hiển thị trình đơn dán cắt dán iPhone trên UILabelNếu không, và tôi cần chuyển đổi
UILabel
thànhUITextField
, làm cách nào tôi có thể bật menu dán bản sao cắt và không cho phép sửa đổi nội dung?
Trả lời
Override phương pháp UITextField
dụ của textFieldShouldBeginEditing
, và đặt nó trở lại NO
để vô hiệu hóa chỉnh sửa.
Hãy xem giao thức UITextFieldDelegate
để biết thêm chi tiết.
tôi có bản sao & dán đơn làm việc trên một UILabel
, tôi chỉ phải trả YES
cho canBecomeFirstResponder
và sau đó gọi [label becomeFirstResponder]
khi nhãn nói là đến trên màn hình. Đối với trở YES
từ canBecomeFirstResponder
, bạn có thể tạo một lớp con tùy chỉnh hoặc vá UILabel
sử dụng một thể loại:
@implementation UILabel (Clipboard)
- (BOOL) canBecomeFirstResponder
{
return YES;
}
@end
Giải pháp loại cảm thấy một chút hackish, nhưng nếu bạn biết những gì bạn đang làm nó có thể được dễ dàng hơn so với subclassing . Tôi cũng đã đưa ra một sample project on GitHub cho thấy cách hiển thị một menu bảng đơn giản trên UILabel
.
Tôi đã thêm một số chức năng bổ sung vào repo của zoul. https://github.com/zhbrass/UILabel-Clipboard – zhbrass
sample project on github do câu trả lời của @ zoul là cách để thực hiện. Tại thời điểm viết bài này, dự án đó không thực sự đưa bất cứ thứ gì vào clipboard (bảng tạm). đây là cách: thực hiện
Thay đổi @ zoul của phương pháp này để:
- (void) copy:(id)sender {
UIPasteboard *pboard = [UIPasteboard generalPasteboard];
pboard.string = self.text;
}
@benvolioT's github project là ví dụ rất tốt cho việc sao chép. Và để dán, hãy tùy chỉnh canPerformAction:withSender:
. Để biết thêm, hãy xem ví dụ CopyPasteTile.
Tôi đã chia hai dự án mẫu zoul và thêm hỗ trợ cho ARC (và một vài tính năng khác) nếu có ai vẫn còn quan tâm:
https://github.com/zhbrass/UILabel-Clipboard
CopyLabel.h/.m nên những gì bạn đang tìm kiếm
Thực hiện tốt. Cảm ơn nhiều. –
tôi đã thực hiện một mã nguồn mở UILabel lớp cho thấy một UIMenuController với một "copy" tùy chọn khi bấm dài:
HTCopyableLabel trên GitHub
Đối Swift 3 và Swift 4 bạn phải thực hiện lớp này:
import UIKit
class CopyableLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
self.sharedInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.sharedInit()
}
func sharedInit() {
self.isUserInteractionEnabled = true
self.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(self.showMenu)))
}
@objc func showMenu(sender: AnyObject?) {
self.becomeFirstResponder()
let menu = UIMenuController.shared
if !menu.isMenuVisible {
menu.setTargetRect(bounds, in: self)
menu.setMenuVisible(true, animated: true)
}
}
override func copy(_ sender: Any?) {
let board = UIPasteboard.general
board.string = text
let menu = UIMenuController.shared
menu.setMenuVisible(false, animated: true)
}
override var canBecomeFirstResponder: Bool {
return true
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(UIResponderStandardEditActions.copy) {
return true
}
return false
}
}
Trong kịch bản của bạn chỉ cần phân lớp các UILabel
với CopyableLabel
lớp
Điều này làm việc hoàn hảo cho tôi. Cảm ơn! –
Swift 4 ☻ Xcode 9.2 Bằng cách sử dụng UIMenuController
chúng ta có thể làm đi.
Tôi đã tạo ra IBDesignable
Tuỳ chỉnh UILabel
lớp mà bạn có thể gán vào storyboard trực tiếp
@IBDesignable
class TapAndCopyLabel: UILabel {
override func awakeFromNib() {
super.awakeFromNib()
//1.Here i am Adding UILongPressGestureRecognizer by which copy popup will Appears
let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPressGesture(_:)))
self.addGestureRecognizer(gestureRecognizer)
self.isUserInteractionEnabled = true
}
// MARK: - UIGestureRecognizer
@objc func handleLongPressGesture(_ recognizer: UIGestureRecognizer) {
guard recognizer.state == .recognized else { return }
if let recognizerView = recognizer.view,
let recognizerSuperView = recognizerView.superview, recognizerView.becomeFirstResponder()
{
let menuController = UIMenuController.shared
menuController.setTargetRect(recognizerView.frame, in: recognizerSuperView)
menuController.setMenuVisible(true, animated:true)
}
}
//2.Returns a Boolean value indicating whether this object can become the first responder
override var canBecomeFirstResponder: Bool {
return true
}
//3.Here we are enabling copy action
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return (action == #selector(UIResponderStandardEditActions.copy(_:)))
}
// MARK: - UIResponderStandardEditActions
override func copy(_ sender: Any?) {
//4.copy current Text to the paste board
UIPasteboard.general.string = text
}
}
Output:
- 1. Bản địa hóa menu Cắt | Sao chép | Dán trên iOS
- 2. Cắt và dán nhiều dòng trong vim
- 3. Cắt và dán từ vim và tmux
- 4. cắt dán hình ảnh trong PHP
- 5. Lossless crop n drop (cắt và dán) cho ảnh JPEG
- 6. Cắt đầu/cuối dòng, dán lên đầu/cuối dòng
- 7. Cách tốt nhất để tạo ảnh cắt dán (bằng Java)
- 8. AVPlayer - UILabel không hiển thị trên video
- 9. Sao chép/Dán trong JavaScript?
- 10. cắt hoàn toàn và dán một phần tử
- 11. Trình đơn ngữ cảnh của iPhone/iPad
- 12. TinyMCE - Dán từ từ
- 13. Dán nhãn trên ô anova trong R
- 14. Hành động trên UILabel trong iphone
- 15. phát hiện dán trên hộp đầu vào
- 16. Dán chặn Android \ copy \ cut trên editText
- 17. sự kiện dán android
- 18. làm thế nào để hiển thị đếm ngược trên uilabel trong iphone?
- 19. Dán sql vào dòng lệnh mySql?
- 20. Sao chép/Dán/Tính toán các ô hiển thị từ một cột của bảng được lọc
- 21. Phát hiện thay đổi/dán trực tiếp trên JavaScript của trình duyệt chéo
- 22. Thực hiện các điều khiển sao chép/dán của iphone trên chế độ xem tùy chỉnh/uiview lớp con
- 23. Dán nhiều dòng vào IDLE
- 24. Dán nhiều dòng vào một TEdit
- 25. Holo Light với Dark Actionbar hiển thị các biểu tượng sao chép và dán Holo tối
- 26. Sao chép và Dán Android với TextView
- 27. Java Clipboard: Dán HTML từ Firefox trên Linux
- 28. Sao chép và dán trên iPhone với nhiều biểu diễn dữ liệu
- 29. Làm cách nào để hiển thị NSAttributedString trên iPhone?
- 30. Cách triển khai menu "Chỉnh sửa" với "Hoàn tác", "Cắt", "Dán" và "Sao chép"?
Bất kỳ may mắn với lựa chọn số 2? Tôi hiện đang cố gắng để dây một lớp con UILabel để hỗ trợ một tùy chọn menu bản sao rất đơn giản, nó không phải là một quá trình đặc biệt thẳng về phía trước. –