增加选择房间 vc

This commit is contained in:
edwinQQQ
2025-05-12 18:53:42 +08:00
parent 2c5a1a289e
commit bd2e5e380f
8 changed files with 378 additions and 6 deletions

View File

@@ -9,11 +9,15 @@
#import <Masonry/Masonry.h>
#import <PhotosUI/PhotosUI.h>
#import "CreateEventSelectRoomViewController.h"
#define MAX_EVENT_TITLE_LENGTH 20
#define MAX_EVENT_CONTENT_LENGTH 100
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIPickerViewDataSource, UIPickerViewDelegate, UIScrollViewDelegate>
@property (nonatomic, strong) UIImage *selectedImage;
//
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag;
- (void)setupDatePicker; //
@@ -49,6 +53,43 @@ static const CGFloat kSectionSpacing = 20.0;
self.selectedDurationInMinutes = 120; // Default to 2 hours
[self updateDurationLabel];
//
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
//
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
tap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tap];
// scrollView delegate
self.scrollView.delegate = self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *userInfo = notification.userInfo;
CGRect keyboardFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat keyboardHeight = keyboardFrame.size.height;
UIEdgeInsets insets = self.scrollView.contentInset;
insets.bottom = keyboardHeight + 20;
self.scrollView.contentInset = insets;
self.scrollView.scrollIndicatorInsets = insets;
}
- (void)keyboardWillHide:(NSNotification *)notification {
UIEdgeInsets insets = self.scrollView.contentInset;
insets.bottom = 0;
self.scrollView.contentInset = insets;
self.scrollView.scrollIndicatorInsets = insets;
}
- (void)dismissKeyboard {
[self.view endEditing:YES];
}
- (void)backButtonTapped {
@@ -227,19 +268,26 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)selectRoomTapped {
NSLog(@"Select Room Tapped");
CreateEventSelectRoomViewController *vc = [[CreateEventSelectRoomViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
// Placeholder: Show a room selection UI (e.g., UIPickerView or new VC)
// For now, just update the label
self.selectRoomPlaceholderLabel.text = @"Room A";
self.selectRoomPlaceholderLabel.textColor = [UIColor blackColor];
// self.selectRoomPlaceholderLabel.text = @"Room A";
// self.selectRoomPlaceholderLabel.textColor = [UIColor blackColor];
// [self checkCreateEventButtonState];
}
- (void)selectStartTimeTapped {
NSLog(@"Select Start Time Tapped");
// Placeholder: Show a date picker
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm";
self.startTimePlaceholderLabel.text = [formatter stringFromDate:[NSDate date]];
self.startTimePlaceholderLabel.textColor = [UIColor blackColor];
[self checkCreateEventButtonState];
}
- (void)selectDurationTapped {
@@ -249,6 +297,7 @@ static const CGFloat kSectionSpacing = 20.0;
// self.durationPlaceholderLabel.textColor = [UIColor blackColor];
self.datePickerContainerView.hidden = NO;
[self checkCreateEventButtonState];
}
- (void)createEventButtonTapped {
@@ -294,6 +343,7 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)textFieldDidChangeSelection:(UITextField *)textField {
if (textField == self.eventTitleTextField) {
[self updateEventTitleCharCount];
[self checkCreateEventButtonState];
}
}
@@ -302,6 +352,7 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)textViewDidChange:(UITextView *)textView {
if (textView == self.eventContentTextView) {
[self updateEventContentCharCount];
[self checkCreateEventButtonState];
// Optional: Add placeholder behavior for UITextView if needed
}
}
@@ -330,6 +381,7 @@ static const CGFloat kSectionSpacing = 20.0;
// : self.shouldUploadBanner = NO;
}
}
[self checkCreateEventButtonState];
}
#pragma mark - UIImagePickerControllerDelegate (Legacy)
@@ -337,10 +389,12 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
UIImage *selectedImage = info[UIImagePickerControllerOriginalImage];
if (selectedImage) {
self.selectedImage = selectedImage;
self.eventBannerImageView.image = selectedImage;
self.eventBannerCamearImageView.hidden = NO; // Hide placeholder once image is selected
}
[picker dismissViewControllerAnimated:YES completion:nil];
[self checkCreateEventButtonState];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
@@ -352,19 +406,27 @@ static const CGFloat kSectionSpacing = 20.0;
- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)) {
[picker dismissViewControllerAnimated:YES completion:nil];
if (results.count == 0) {
[self checkCreateEventButtonState];
return;
}
PHPickerResult *result = results.firstObject;
if ([result.itemProvider canLoadObjectOfClass:[UIImage class]]) {
[result.itemProvider loadObjectOfClass:[UIImage class] completionHandler:^(__kindof id<NSItemProviderReading> _Nullable object, NSError * _Nullable error) {
if ([object isKindOfClass:[UIImage class]]) {
dispatch_async(dispatch_get_main_queue(), ^{
self.selectedImage = (UIImage *)object;
self.eventBannerImageView.image = (UIImage *)object;
self.eventBannerCamearImageView.hidden = NO; // Hide placeholder
[self checkCreateEventButtonState];
});
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[self checkCreateEventButtonState];
});
}
}];
} else {
[self checkCreateEventButtonState];
}
}
@@ -706,4 +768,26 @@ static const CGFloat kSectionSpacing = 20.0;
}];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self dismissKeyboard];
}
- (void)checkCreateEventButtonState {
NSString *placeholder = YMLocalizedString(@"XPAnchorPKTableViewCell2");
BOOL hasTitle = self.eventTitleTextField.text.length > 0;
BOOL hasBanner = self.selectedImage != nil;
BOOL hasRoom = self.selectRoomPlaceholderLabel.text.length > 0 && ![self.selectRoomPlaceholderLabel.text isEqualToString:placeholder];
BOOL hasStartTime = self.startTimePlaceholderLabel.text.length > 0 && ![self.startTimePlaceholderLabel.text isEqualToString:placeholder];
BOOL hasDuration = self.durationPlaceholderLabel.text.length > 0 && ![self.durationPlaceholderLabel.text isEqualToString:placeholder];
BOOL hasContent = self.eventContentTextView.text.length > 0;
if (hasTitle && hasBanner && hasRoom && hasStartTime && hasDuration && hasContent) {
self.createEventButton.alpha = 1.0;
self.createEventButton.userInteractionEnabled = YES;
} else {
self.createEventButton.alpha = 0.3;
self.createEventButton.userInteractionEnabled = NO;
}
}
@end