I have a small ui view that alows user to select a pic form camera roll, i want to attach it along with my text fields in email.
.h
#property (strong, nonatomic) IBOutlet UIImageView *imageView;
.m
NSString *emailBody = [NSString stringWithFormat:#(textboxes and other outlets are here)"%#"imageView.image];
When emailed I get the text strings attached but not the image? Coul dsomeone point me in the right direction on this, thanks
xcode 4.3
try this link to send images by email
http://iosdevelopertips.com/email/how-to-send-email-with-attachments-example-using-iphone-camera-to-email-a-photo.html
if that is not what u want u may have to convert image to nsdata using the functions
NSData *data=UIImageJPEGRepresentation(image, 1.0);
now convert this data to string by base64encoding and then attach to string.
Related
I have a reader app that loads .epub files and usually I have no problem with selection at all, lately I have integrated fixed layout .epub files but I'm facing a problem: when I have a box containing one line the selection works fine, but when the box contains several lines, meaning several <p></p>, I cannot select a single word from the box. On selection the whole box gets selected as shown in the screenshot. When I try the same .epub file on iBooks, the selection works fine on all text. Any idea how I can fix the issue?
Here is the code for loading the file on UiWebView.
NSString *contents = [NSString stringWithContentsOfFile:itemPath encoding:NSUTF8StringEncoding error:nil];
if (!contents) {
contents = [NSString stringWithContentsOfFile:itemPath encoding:NSASCIIStringEncoding error:nil];
}
[readingWebView loadHTMLString:contents baseURL:baseURL];
I have finally got the answer.
When using this function:
NSString *jsString = [NSString stringWithFormat:#"document.getElementsByTagName('body')[0].webkitTextSizeAdjust= '%d%%'", font];
to set the font size some restrictions are set on the web view, one of them is related to the selection with fixed layout epubs.
I used instead:
NSString *jsString = [NSString stringWithFormat:#"document.getElementsByTagName('body')[0].style.fontSize= '%d%%'", font];
I have a newb question, which I have tried unsuccessfully to find answers for on the web. The task is simple: I want to create a core data document-based app but alter the values in some label objects. Using interface builder, I can build the core data model and populate it, using an array controller, table, etc. all without writing any code. So far so good. My test example is to build a core data model with Box entities that have length and width attributes. I would like a label to display the area, i.e. length*width for any geometrically challenged :).
So after browsing around, I've decided I need to create an NSWindowController subclass and use that to update the label when a box in the table is selected. Have attempted this, but have failed. Before I even hook up the label to the window controller, I have a problem. Following the template comments, I added this to Document.m:
- (void)makeWindowControllers
{
NSLog(#"Adding custom Window Controller");
MyWindowController* myWindowController = [[MyWindowController alloc] init];
[self addWindowController:myWindowController];
}
Also added this to the template MyWindowController.m:
- (id)init
{
self = [super initWithWindowNibName:#"MyWindowController"];
return self;
}
The window controller has its own NIB file from Interface builder where I put the table and label etc. The file owner is set to MyWindowController. Probably forgetting other things, but that's what I remember for now.
The log message appears at startup, but then I get an exception "this class is not key value coding-compliant for the key managedObjectContext" before the window appears. I'm guessing that I don't have the window controller hooked up to the document class properly? My other thought is that the array controller is in the window controller nib, not the document nib, so maybe it's looking in the wrong place for the managedObjectContext?
I would try a different approach: Add area to your Box entity as a read-only attribute. Auto-create a Box class with Xcode ("Create NSManagedObject Subclass" menu item in the "Editor" menu when viewing the data model), then add this to Box.h
#property (weak, readonly) NSString * area;
and this to Box.m
- (NSNumber *)area
{
return [NSNumber numberWithDouble:([[self length] doubleValue] - [[self width] doubleValue])];
}
+ (NSSet *)keyPathsForValuesAffectingArea
{
return [NSSet setWithObjects:#"length", #"width", nil];
}
If you do this you can just bind area to a label value like you do for the other Box properties. No need to subclass NSWindowController or watch for changes.
I am hoping someone can help with this issue that I am having using monotouch with xib files.
I am trying to create a subview derived from uiview. In IB I create a class, set its type to that of my custom class, and then link all of the IBOutlets to the custom class (this is where I think the error may be, as I suspect this should be the files owner).
A IB .h file example is
#interface ActivityUtilityView : UIView {
UILabel *_ActivityLabel;
UILabel *_CaptionLabel;
}
#properrty (nonatomic, retain) IBOutlet UILabel * ActivityLabel;
#properrty (nonatomic, retain) IBOutlet UILabel * CaptionLabel;
#End
In the application code this view needs to be loaded at run time using.
var intptr = NSBundle.MainBundle.LoadNib("ActivityUtilityView",parent_controller,null).ValueAt(0);
m_ActivityView = new ActivityView(intptr);
The first issue is that none of the IBOutlets are instantiated.
The second issue is that the view is being created twice, from what I can tell.
Please can anyone help?
EDIT
I have discovered that half the problem is that the outlets are not instantiated until the view is displayed.
So how can I force a subview to be displayed?
I found a solution that works.
m_ActivityView = Activator.CreateInstance<ActivityUtilityView>();
var view = NSBundle.MainBundle.LoadNib("ActivityUtilityView",m_ActivityView,null);
m_ProgressView = Runtime.GetNSObject(views.ValueAt(0) as ActivityUtilityView;
Creating the view using the IntPtr constructor does not instantiate the IBOutlets until the view has been displayed. This method appears to.
To clarify the issue arrose due to a race condition on background worker threads.
New to iOS dev. Kindly correct me if i am wrong?
I have a UIWindow, and rootviewcontroller is :
#interface ViewController : UIViewController
{
IBOutlet UIButton *but;
}
#property (nonatomic, strong) UIButton *but;
-(IBAction) butButtonPressed;
#end
ie: If i make this Viewcontroller as a root view controller, the UIView that is available in the ViewController is displayed. Understood.
I have created a new class inherited from UIViewController, and along with its .xib file.
So xib file name is : view1.xib,
My Objective is to display this view when the button is pressed.
Now i have created a button and button press invokes butButtonPressed. Inside of butButtonPressed, i did the following.
myViewController *vcontroler = [[ViewController alloc] initWithNibName:#"view1" bundle:nil];
[self.view.window addSubview:vcontroler.view];
Application crashes. What am i doing wrong ? Kindly point out.
This...
[self.view.window addSubview:vcontroler.view];
...is a really bad strategy (and I seriously wish I knew where people are finding it as a way of showing views). If you create a view controller, you should use it rather than just treating it as a temporary container that you can rip views out of.
If you want vcontroler to look like a child of your first controller (and you have a UINavigationController), use pushViewController:animated:. Otherwise you can show it as modal with presentModalViewController:animated:.
If you only want to add a view to the existing display, put the view in ViewController's hierarchy and show/hide it.
If you absolutely must have it as a sub-controller of ViewController then you need to keep a reference to it and manage its lifecycle inside the owning controller.
I want to get the particular image name by touching inside of that image. Can any one give me the sample code for that?
Nick Weaver is correct. There is still a way to do it, though.
Create an array with the names of the images. Set the tag property of each UIImageView so it corresponds to the names in the array. Then, access the array via the tag property.
NSArray *nameArray = [NSArray arrayWithObjects:#"image1", #"image2", nil];
//touch happened
NSString *imageName = [nameArray objectAtIndex:imageView.tag];
Another method is creating a UIImageView subclass.
UIImageView nor UIImage do store the name of the image you have used to create the image. You can subclass UIImageView and use your own initializer and an extra field to store the name.